[llvm] r270629 - [LoopUnrollAnalyzer] Fix a crash in UnrolledInstAnalyzer::visitCastInst.

Michael Zolotukhin via llvm-commits llvm-commits at lists.llvm.org
Tue May 24 15:59:58 PDT 2016


Author: mzolotukhin
Date: Tue May 24 17:59:58 2016
New Revision: 270629

URL: http://llvm.org/viewvc/llvm-project?rev=270629&view=rev
Log:
[LoopUnrollAnalyzer] Fix a crash in UnrolledInstAnalyzer::visitCastInst.

This fixes PR27847. Now for real.

Modified:
    llvm/trunk/lib/Analysis/LoopUnrollAnalyzer.cpp
    llvm/trunk/test/Transforms/LoopUnroll/full-unroll-crashers.ll

Modified: llvm/trunk/lib/Analysis/LoopUnrollAnalyzer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopUnrollAnalyzer.cpp?rev=270629&r1=270628&r2=270629&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/LoopUnrollAnalyzer.cpp (original)
+++ llvm/trunk/lib/Analysis/LoopUnrollAnalyzer.cpp Tue May 24 17:59:58 2016
@@ -141,11 +141,7 @@ bool UnrolledInstAnalyzer::visitCastInst
   Constant *COp = dyn_cast<Constant>(I.getOperand(0));
   if (!COp)
     COp = SimplifiedValues.lookup(I.getOperand(0));
-  if (COp) {
-    if (COp->getType() == I.getType()) {
-      SimplifiedValues[&I] = cast<Constant>(COp);
-      return true;
-    }
+  if (COp && CastInst::castIsValid(I.getOpcode(), COp, I.getType())) {
     if (Constant *C =
             ConstantExpr::getCast(I.getOpcode(), COp, I.getType())) {
       SimplifiedValues[&I] = C;

Modified: llvm/trunk/test/Transforms/LoopUnroll/full-unroll-crashers.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopUnroll/full-unroll-crashers.ll?rev=270629&r1=270628&r2=270629&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/LoopUnroll/full-unroll-crashers.ll (original)
+++ llvm/trunk/test/Transforms/LoopUnroll/full-unroll-crashers.ll Tue May 24 17:59:58 2016
@@ -119,3 +119,21 @@ for.inc:
 for.cond.cleanup:
   ret void
 }
+
+define void @ptrtoint_cast2() {
+entry:
+  br i1 false, label %for.body.lr.ph, label %exit
+
+for.body.lr.ph:
+  br label %for.body
+
+for.body:
+  %iv = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
+  %offset = getelementptr inbounds float, float* null, i32 3
+  %bc = bitcast float* %offset to i64*
+  %inc = add nuw nsw i32 %iv, 1
+  br i1 false, label %for.body, label %exit
+
+exit:
+  ret void
+}




More information about the llvm-commits mailing list