[PATCH] [InstCombine] Fix visitSwitchInst to use right operand	types for sub cstexpr.
    David Majnemer 
    david.majnemer at gmail.com
       
    Sun Dec 14 02:44:37 PST 2014
    
    
  
REPOSITORY
  rL LLVM
================
Comment at: lib/Transforms/InstCombine/InstructionCombining.cpp:2107-2108
@@ -2105,3 +2106,4 @@
     for (auto &C : SI.cases())
       static_cast<SwitchInst::CaseIt *>(&C)->setValue(ConstantInt::get(
           SI.getContext(), C.getCaseValue()->getValue().trunc(NewWidth)));
+    TruncCond = true;
----------------
InstCombine methods are supposed to return the original instruction if they modify the instruction.  It seems `visitSwitchInst` isn't doing this here.
================
Comment at: lib/Transforms/InstCombine/InstructionCombining.cpp:2120-2123
@@ -2117,3 +2119,6 @@
           ConstantInt* CaseVal = i.getCaseValue();
-          Constant* NewCaseVal = ConstantExpr::getSub(cast<Constant>(CaseVal),
-                                                      AddRHS);
+          Constant *LHS = cast<Constant>(
+              TruncCond ? ConstantInt::get(SI.getContext(),
+                                           CaseVal->getValue().sext(BitWidth))
+                        : CaseVal);
+          Constant* NewCaseVal = ConstantExpr::getSub(LHS, AddRHS);
----------------
Isn't this equivalent to:
`Constant *LHS = ConstantExpr::getSExt(CaseVal, BitWidth);`
================
Comment at: lib/Transforms/InstCombine/InstructionCombining.cpp:2124
@@ -2120,1 +2123,3 @@
+                        : CaseVal);
+          Constant* NewCaseVal = ConstantExpr::getSub(LHS, AddRHS);
           assert(isa<ConstantInt>(NewCaseVal) &&
----------------
Might as well make this `Constant *` since you are changing the right hand side.
================
Comment at: lib/Transforms/InstCombine/InstructionCombining.cpp:2124
@@ -2120,1 +2123,3 @@
+                        : CaseVal);
+          Constant* NewCaseVal = ConstantExpr::getSub(LHS, AddRHS);
           assert(isa<ConstantInt>(NewCaseVal) &&
----------------
majnemer wrote:
> Might as well make this `Constant *` since you are changing the right hand side.
Might as well put the pointer on the right hand side.
http://reviews.llvm.org/D6644
EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
    
    
More information about the llvm-commits
mailing list