Fix an unequal bitwidth issue.
authorReid Spencer <rspencer@reidspencer.com>
Fri, 2 Mar 2007 02:59:25 +0000 (02:59 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Fri, 2 Mar 2007 02:59:25 +0000 (02:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34831 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolution.cpp

index 438e42886bf20b3bc1d717742bdf71ccaef79946..d2eca4adeb4106d5183bddc259ef1b9dfc431598 100644 (file)
@@ -1341,9 +1341,12 @@ static APInt GetConstantFactor(SCEVHandle S) {
       return APInt(C->getBitWidth(), 1).shl(C->getBitWidth()-1);
   }
 
-  if (SCEVTruncateExpr *T = dyn_cast<SCEVTruncateExpr>(S))
-    return GetConstantFactor(T->getOperand()) &
-           cast<IntegerType>(T->getType())->getMask();
+  if (SCEVTruncateExpr *T = dyn_cast<SCEVTruncateExpr>(S)) {
+    APInt Mask(cast<IntegerType>(T->getType())->getMask());
+    APInt GCF(GetConstantFactor(T->getOperand()));
+    Mask.zextOrTrunc(GCF.getBitWidth());
+    return GCF & Mask;
+  }
   if (SCEVZeroExtendExpr *E = dyn_cast<SCEVZeroExtendExpr>(S))
     return GetConstantFactor(E->getOperand());