%struct.Foo = type { i32, ptr }
; Test that we don't crash when inlining @bar (rdar://22521387).
-define void @foo(ptr align 4 %a) {
+define void @foo(i1 %c, ptr align 4 %a) {
entry:
- call fastcc void @bar(ptr nonnull align 4 undef)
+ call fastcc void @bar(i1 %c, ptr nonnull align 4 undef)
; CHECK: call void @llvm.assume(i1 undef)
; CHECK: unreachable
ret void
}
-define fastcc void @bar(ptr align 4 %a) {
+define fastcc void @bar(i1 %c, ptr align 4 %a) {
; CHECK-LABEL: @bar
entry:
%b = getelementptr inbounds %struct.Foo, ptr %a, i32 0, i32 1
- br i1 undef, label %if.end, label %if.then.i.i
+ br i1 %c, label %if.end, label %if.then.i.i
if.then.i.i:
call void @llvm.assume(i1 undef)
; CHECK-LABEL: @constexpr_addrspacecast_ptr_size_change(
; CHECK: load i64, ptr addrspace(4) addrspacecast (ptr addrspace(3) @lds to ptr addrspace(4))
; CHECK-NEXT: br
-define void @constexpr_addrspacecast_ptr_size_change() #0 {
- %tmp0 = call i32 @foo(ptr addrspace(4) addrspacecast (ptr addrspace(3) @lds to ptr addrspace(4))) #1
+define void @constexpr_addrspacecast_ptr_size_change(i1 %c) #0 {
+ %tmp0 = call i32 @foo(i1 %c, ptr addrspace(4) addrspacecast (ptr addrspace(3) @lds to ptr addrspace(4))) #1
ret void
}
-define i32 @foo(ptr addrspace(4) %arg) #1 {
+define i32 @foo(i1 %c, ptr addrspace(4) %arg) #1 {
bb:
%tmp = getelementptr i64, ptr addrspace(4) %arg, i64 undef
%tmp1 = load i64, ptr addrspace(4) %tmp
- br i1 undef, label %bb2, label %bb3
+ br i1 %c, label %bb2, label %bb3
bb2:
store i64 0, ptr addrspace(4) %tmp
br i1 %tmp, label %bb1, label %bb2
bb1:
- br i1 undef, label %bb4, label %bb2
+ br i1 %tmp, label %bb4, label %bb2
bb2:
- br i1 undef, label %bb4, label %bb5
+ br i1 %tmp, label %bb4, label %bb5
bb4:
%xx1 = phi i32 [ 1, %bb1 ], [ 9, %bb2 ]