1 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s 2 3 declare void @callee0() 4 declare void @callee1(i32,i32) 5 6 define 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 16 define 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 31 define 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 39 define 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 49 define 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 59 ; Invoke versions of the above tests: 60 61 62 define void @g0(i32* %ptr) personality i8 3 { 63 ; CHECK-LABEL: @g0( 64 entry: 65 %l = load i32, i32* %ptr 66 %x = add i32 42, 1 67 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 68 ; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float 0.000000e+00, i64 100, i32 %l) ] 69 70 exception: 71 %cleanup = landingpad i8 cleanup 72 br label %normal 73 normal: 74 ret void 75 } 76 77 define void @g1(i32* %ptr) personality i8 3 { 78 ; CHECK-LABEL: @g1( 79 entry: 80 %l = load i32, i32* %ptr 81 %x = add i32 42, 1 82 83 invoke void @callee0() to label %normal unwind label %exception 84 ; CHECK: invoke void @callee0(){{$}} 85 86 exception: 87 %cleanup = landingpad i8 cleanup 88 br label %normal 89 90 normal: 91 invoke void @callee0() [ "foo"() ] to label %normal1 unwind label %exception1 92 ; CHECK: invoke void @callee0() [ "foo"() ] 93 94 exception1: 95 %cleanup1 = landingpad i8 cleanup 96 br label %normal1 97 98 normal1: 99 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 100 ; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 101 102 exception2: 103 %cleanup2 = landingpad i8 cleanup 104 br label %normal2 105 106 normal2: 107 ret void 108 } 109 110 define void @g2(i32* %ptr) personality i8 3 { 111 ; CHECK-LABEL: @g2( 112 entry: 113 invoke void @callee0() [ "foo"() ] to label %normal unwind label %exception 114 ; CHECK: invoke void @callee0() [ "foo"() ] 115 116 exception: 117 %cleanup = landingpad i8 cleanup 118 br label %normal 119 normal: 120 ret void 121 } 122 123 define void @g3(i32* %ptr) personality i8 3 { 124 ; CHECK-LABEL: @g3( 125 entry: 126 %l = load i32, i32* %ptr 127 %x = add i32 42, 1 128 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 129 ; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 130 131 exception: 132 %cleanup = landingpad i8 cleanup 133 br label %normal 134 normal: 135 ret void 136 } 137 138 define void @g4(i32* %ptr) personality i8 3 { 139 ; CHECK-LABEL: @g4( 140 entry: 141 %l = load i32, i32* %ptr 142 %x = add i32 42, 1 143 invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 144 to label %normal unwind label %exception 145 ; CHECK: invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float 0.000000e+00, i32 %l) ] 146 147 exception: 148 %cleanup = landingpad i8 cleanup 149 br label %normal 150 normal: 151 ret void 152 } 153