From 04c6437444222d4ad94c5d3e00da6c29e17dd389 Mon Sep 17 00:00:00 2001 From: Daniel Hong Date: Sat, 15 Sep 2018 10:17:00 -0400 Subject: [PATCH] Disable Max Min Helper on Z10 and below Max Min Helper in z codegen uses LOCR instructions which are unsupported below Z10. This commit disables max min optimization when on Z10 and below. Issue: #2969 Signed-off-by: Daniel Hong --- compiler/z/codegen/ControlFlowEvaluator.cpp | 3 +++ compiler/z/codegen/OMRCodeGenerator.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/compiler/z/codegen/ControlFlowEvaluator.cpp b/compiler/z/codegen/ControlFlowEvaluator.cpp index 18ba37643fb..ddf8930ca8b 100644 --- a/compiler/z/codegen/ControlFlowEvaluator.cpp +++ b/compiler/z/codegen/ControlFlowEvaluator.cpp @@ -910,6 +910,9 @@ lcmpHelper(TR::Node * node, TR::CodeGenerator * cg) */ static TR::Register * maxMinHelper(TR::Node *node, TR::CodeGenerator *cg, bool isMax) { + TR_ASSERT_FATAL(cg->getS390ProcessorInfo()->supportsArch(TR_S390ProcessorInfo::TR_z196), + "cannot evaluate %s on z10 or below", node->getOpCode().getName()); + TR::Register *registerA = cg->gprClobberEvaluate(node->getFirstChild()); TR::Register *registerB = cg->evaluate(node->getSecondChild()); // Mask is 4 to pick b when a is Lower for max, 2 to pick b when a is higher for min diff --git a/compiler/z/codegen/OMRCodeGenerator.cpp b/compiler/z/codegen/OMRCodeGenerator.cpp index d7881455eab..217308c9b96 100644 --- a/compiler/z/codegen/OMRCodeGenerator.cpp +++ b/compiler/z/codegen/OMRCodeGenerator.cpp @@ -705,6 +705,10 @@ OMR::Z::CodeGenerator::CodeGenerator() { self()->setSupportsAtomicLoadAndAdd(); } + else + { + comp->setOption(TR_DisableMaxMinOptimization); + } if (_processorInfo.supportsArch(TR_S390ProcessorInfo::TR_zEC12)) {