]> granicus.if.org Git - llvm/commitdiff
[X86ISelLowering] combineCMov - cleanup CMOV->LEA codegen. NFCI.
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 31 Aug 2019 14:18:26 +0000 (14:18 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 31 Aug 2019 14:18:26 +0000 (14:18 +0000)
Only compute the diff once and we don't need the truncation code (assert the bitwidth is correct just to be safe).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370583 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index aae5afb880a5af0819583eb22d776f4ce43e6f34..c61768c5b3b94f4d07c12197ebdc1067abd6d8e1 100644 (file)
@@ -37537,12 +37537,13 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
       // Optimize cases that will turn into an LEA instruction.  This requires
       // an i32 or i64 and an efficient multiplier (1, 2, 3, 4, 5, 8, 9).
       if (N->getValueType(0) == MVT::i32 || N->getValueType(0) == MVT::i64) {
-        uint64_t Diff = TrueC->getZExtValue()-FalseC->getZExtValue();
-        if (N->getValueType(0) == MVT::i32) Diff = (unsigned)Diff;
+        APInt Diff = TrueC->getAPIntValue() - FalseC->getAPIntValue();
+        assert(Diff.getBitWidth() == N->getValueType(0).getSizeInBits() &&
+               "Implicit constant truncation");
 
         bool isFastMultiplier = false;
-        if (Diff < 10) {
-          switch ((unsigned char)Diff) {
+        if (Diff.ult(10)) {
+          switch (Diff.getZExtValue()) {
           default: break;
           case 1:  // result = add base, cond
           case 2:  // result = lea base(    , cond*2)
@@ -37557,7 +37558,6 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
         }
 
         if (isFastMultiplier) {
-          APInt Diff = TrueC->getAPIntValue()-FalseC->getAPIntValue();
           Cond = getSETCC(CC, Cond, DL ,DAG);
           // Zero extend the condition if needed.
           Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, FalseC->getValueType(0),