[PATCH] D12997: [Inline] Use AssumptionCache from the right Function

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 19 15:48:11 PDT 2015


vsk created this revision.
vsk added reviewers: hfinkel, joker.eph.
vsk added a subscriber: llvm-commits.

This changes the behavior of AddAligntmentAssumptions to match its
comment. I.e, prove the asserted alignment in the context of the caller,
not the callee.
    
Thanks to Mehdi Amini for seeing the issue here!

http://reviews.llvm.org/D12997

Files:
  lib/Transforms/Utils/InlineFunction.cpp
  test/Transforms/Inline/inline-assume.ll

Index: test/Transforms/Inline/inline-assume.ll
===================================================================
--- /dev/null
+++ test/Transforms/Inline/inline-assume.ll
@@ -0,0 +1,30 @@
+; RUN: opt -inline -S -o - < %s | FileCheck %s
+
+%0 = type opaque
+%struct.Foo = type { i32, %0* }
+
+; Test that we don't crash when inlining @bar (rdar://22521387).
+define void @foo(%struct.Foo* align 4 %a) {
+entry:
+  call fastcc void @bar(%struct.Foo* nonnull align 4 undef)
+
+; CEHCK: call void @llvm.assume(i1 undef)
+; CHECK: unreachable
+
+  ret void
+}
+
+define fastcc void @bar(%struct.Foo* align 4 %a) {
+entry:
+  %b = getelementptr inbounds %struct.Foo, %struct.Foo* %a, i32 0, i32 1
+  br i1 undef, label %if.end, label %if.then.i.i
+
+if.then.i.i:
+  call void @llvm.assume(i1 undef)
+  unreachable
+
+if.end:
+  ret void
+}
+
+declare void @llvm.assume(i1)
Index: lib/Transforms/Utils/InlineFunction.cpp
===================================================================
--- lib/Transforms/Utils/InlineFunction.cpp
+++ lib/Transforms/Utils/InlineFunction.cpp
@@ -741,7 +741,7 @@
       // caller, then don't bother inserting the assumption.
       Value *Arg = CS.getArgument(I->getArgNo());
       if (getKnownAlignment(Arg, DL, CS.getInstruction(),
-                            &IFI.ACT->getAssumptionCache(*CalledFunc),
+                            &IFI.ACT->getAssumptionCache(*CS.getCaller()),
                             &DT) >= Align)
         continue;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D12997.35186.patch
Type: text/x-patch
Size: 1477 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150919/bf8987cb/attachment.bin>


More information about the llvm-commits mailing list