1; RUN: llvm-as < %s | llvm-dis | FileCheck %s 2 3declare void @callee0() 4declare void @callee1(i32,i32) 5 6define void @f0(i32* %ptr) { 7; CHECK-LABEL: @f0( 8 entry: 9 %l = load i32, i32* %ptr 10 %x = add i32 42, 1 11 call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] 12; CHECK: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] 13 ret void 14} 15 16define void @f1(i32* %ptr) { 17; CHECK-LABEL: @f1( 18 entry: 19 %l = load i32, i32* %ptr 20 %x = add i32 42, 1 21 22 call void @callee0() 23 call void @callee0() [ "foo"() ] 24 call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] 25; CHECK: @callee0(){{$}} 26; CHECK-NEXT: call void @callee0() [ "foo"() ] 27; CHECK-NEXT: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] 28 ret void 29} 30 31define void @f2(i32* %ptr) { 32; CHECK-LABEL: @f2( 33 entry: 34 call void @callee0() [ "foo"() ] 35; CHECK: call void @callee0() [ "foo"() ] 36 ret void 37} 38 39define void @f3(i32* %ptr) { 40; CHECK-LABEL: @f3( 41 entry: 42 %l = load i32, i32* %ptr 43 %x = add i32 42, 1 44 call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 45; CHECK: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 46 ret void 47} 48 49define void @f4(i32* %ptr) { 50; CHECK-LABEL: @f4( 51 entry: 52 %l = load i32, i32* %ptr 53 %x = add i32 42, 1 54 call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 55; CHECK: call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 56 ret void 57} 58 59define void @f5(i32 %x) { 60entry: 61 call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ] 62; CHECK: call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ] 63 ret void 64} 65 66; Invoke versions of the above tests: 67 68 69define void @g0(i32* %ptr) personality i8 3 { 70; CHECK-LABEL: @g0( 71 entry: 72 %l = load i32, i32* %ptr 73 %x = add i32 42, 1 74 invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] to label %normal unwind label %exception 75; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] 76 77exception: 78 %cleanup = landingpad i8 cleanup 79 br label %normal 80normal: 81 ret void 82} 83 84define void @g1(i32* %ptr) personality i8 3 { 85; CHECK-LABEL: @g1( 86 entry: 87 %l = load i32, i32* %ptr 88 %x = add i32 42, 1 89 90 invoke void @callee0() to label %normal unwind label %exception 91; CHECK: invoke void @callee0(){{$}} 92 93exception: 94 %cleanup = landingpad i8 cleanup 95 br label %normal 96 97normal: 98 invoke void @callee0() [ "foo"() ] to label %normal1 unwind label %exception1 99; CHECK: invoke void @callee0() [ "foo"() ] 100 101exception1: 102 %cleanup1 = landingpad i8 cleanup 103 br label %normal1 104 105normal1: 106 invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] to label %normal2 unwind label %exception2 107; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 108 109exception2: 110 %cleanup2 = landingpad i8 cleanup 111 br label %normal2 112 113normal2: 114 ret void 115} 116 117define void @g2(i32* %ptr) personality i8 3 { 118; CHECK-LABEL: @g2( 119 entry: 120 invoke void @callee0() [ "foo"() ] to label %normal unwind label %exception 121; CHECK: invoke void @callee0() [ "foo"() ] 122 123exception: 124 %cleanup = landingpad i8 cleanup 125 br label %normal 126normal: 127 ret void 128} 129 130define void @g3(i32* %ptr) personality i8 3 { 131; CHECK-LABEL: @g3( 132 entry: 133 %l = load i32, i32* %ptr 134 %x = add i32 42, 1 135 invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] to label %normal unwind label %exception 136; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 137 138exception: 139 %cleanup = landingpad i8 cleanup 140 br label %normal 141normal: 142 ret void 143} 144 145define void @g4(i32* %ptr) personality i8 3 { 146; CHECK-LABEL: @g4( 147 entry: 148 %l = load i32, i32* %ptr 149 %x = add i32 42, 1 150 invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 151 to label %normal unwind label %exception 152; CHECK: invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 153 154exception: 155 %cleanup = landingpad i8 cleanup 156 br label %normal 157normal: 158 ret void 159} 160 161define void @g5(ptr %ptr) personality i8 3 { 162entry: 163 %l = load i32, ptr %ptr, align 4 164 %x = add i32 42, 1 165 invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ] 166 to label %normal unwind label %exception 167; CHECK: invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, metadata !"abc"), "bar"(metadata !"abcde", metadata !"qwerty") ] 168 169exception: ; preds = %entry 170 %cleanup = landingpad i8 171 cleanup 172 br label %normal 173 174normal: ; preds = %exception, %entry 175 ret void 176} 177