245 lines · plain
1; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s2 3declare ptr @llvm.returnaddress(i32)4define void @return_address(i32 %var) {5 ; CHECK: immarg operand has non-immediate parameter6 ; CHECK-NEXT: i32 %var7 ; CHECK-NEXT: %result = call ptr @llvm.returnaddress(i32 %var)8 %result = call ptr @llvm.returnaddress(i32 %var)9 ret void10}11 12declare ptr @llvm.frameaddress(i32)13define void @frame_address(i32 %var) {14 ; CHECK: immarg operand has non-immediate parameter15 ; CHECK-NEXT: i32 %var16 ; CHECK-NEXT: %result = call ptr @llvm.frameaddress.p0(i32 %var)17 %result = call ptr @llvm.frameaddress(i32 %var)18 ret void19}20 21declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1)22define void @memcpy(ptr %dest, ptr %src, i1 %is.volatile) {23 ; CHECK: immarg operand has non-immediate parameter24 ; CHECK-NEXT: i1 %is.volatile25 ; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr %dest, ptr %src, i32 8, i1 %is.volatile)26 call void @llvm.memcpy.p0.p0.i32(ptr %dest, ptr %src, i32 8, i1 %is.volatile)27 ret void28}29 30declare void @llvm.memcpy.inline.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1)31define void @memcpy_inline_is_volatile(ptr %dest, ptr %src, i1 %is.volatile) {32 ; CHECK: immarg operand has non-immediate parameter33 ; CHECK-NEXT: i1 %is.volatile34 ; CHECK-NEXT: call void @llvm.memcpy.inline.p0.p0.i32(ptr %dest, ptr %src, i32 8, i1 %is.volatile)35 call void @llvm.memcpy.inline.p0.p0.i32(ptr %dest, ptr %src, i32 8, i1 %is.volatile)36 ret void37}38 39declare void @llvm.memmove.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1)40define void @memmove(ptr %dest, ptr %src, i1 %is.volatile) {41 ; CHECK: immarg operand has non-immediate parameter42 ; CHECK-NEXT: i1 %is.volatile43 ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr %dest, ptr %src, i32 8, i1 %is.volatile)44 call void @llvm.memmove.p0.p0.i32(ptr %dest, ptr %src, i32 8, i1 %is.volatile)45 ret void46}47 48declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1)49define void @memset(ptr %dest, i8 %val, i1 %is.volatile) {50 ; CHECK: immarg operand has non-immediate parameter51 ; CHECK-NEXT: i1 %is.volatile52 ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr %dest, i8 %val, i32 8, i1 %is.volatile)53 call void @llvm.memset.p0.i32(ptr %dest, i8 %val, i32 8, i1 %is.volatile)54 ret void55}56 57declare void @llvm.memset.inline.p0.i32(ptr nocapture, i8, i32, i1)58define void @memset_inline_is_volatile(ptr %dest, i8 %value, i1 %is.volatile) {59 ; CHECK: immarg operand has non-immediate parameter60 ; CHECK-NEXT: i1 %is.volatile61 ; CHECK-NEXT: call void @llvm.memset.inline.p0.i32(ptr %dest, i8 %value, i32 8, i1 %is.volatile)62 call void @llvm.memset.inline.p0.i32(ptr %dest, i8 %value, i32 8, i1 %is.volatile)63 ret void64}65 66declare void @llvm.experimental.memset.pattern.p0.i32.i32(ptr nocapture, i32, i32, i1)67define void @memset_pattern_is_volatile(ptr %dest, i32 %value, i1 %is.volatile) {68 ; CHECK: immarg operand has non-immediate parameter69 ; CHECK-NEXT: i1 %is.volatile70 ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i32.i32(ptr %dest, i32 %value, i32 8, i1 %is.volatile)71 call void @llvm.experimental.memset.pattern.p0.i32.i32(ptr %dest, i32 %value, i32 8, i1 %is.volatile)72 ret void73}74 75declare i64 @llvm.objectsize.i64.p0(ptr, i1, i1, i1)76define void @objectsize(ptr %ptr, i1 %a, i1 %b, i1 %c) {77 ; CHECK: immarg operand has non-immediate parameter78 ; CHECK-NEXT: i1 %a79 ; CHECK-NEXT: %val0 = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 %a, i1 false, i1 false)80 %val0 = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 %a, i1 false, i1 false)81 82 ; CHECK: immarg operand has non-immediate parameter83 ; CHECK-NEXT: i1 %b84 ; CHECK-NEXT: %val1 = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 %b, i1 false)85 %val1 = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 %b, i1 false)86 87 ; CHECK: immarg operand has non-immediate parameter88 ; CHECK-NEXT: i1 %c89 ; CHECK-NEXT: %val2 = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 false, i1 %c)90 %val2 = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 false, i1 %c)91 ret void92}93 94declare i64 @llvm.smul.fix.i64(i64, i64, i32)95define i64 @smul_fix(i64 %arg0, i64 %arg1, i32 %arg2) {96 ; CHECK: immarg operand has non-immediate parameter97 ; CHECK-NEXT: i32 %arg298 ; CHECK-NEXT: %ret = call i64 @llvm.smul.fix.i64(i64 %arg0, i64 %arg1, i32 %arg2)99 %ret = call i64 @llvm.smul.fix.i64(i64 %arg0, i64 %arg1, i32 %arg2)100 ret i64 %ret101}102 103declare i64 @llvm.smul.fix.sat.i64(i64, i64, i32)104define i64 @smul_fix_sat(i64 %arg0, i64 %arg1, i32 %arg2) {105 ; CHECK: immarg operand has non-immediate parameter106 ; CHECK-NEXT: i32 %arg2107 ; CHECK-NEXT: %ret = call i64 @llvm.smul.fix.sat.i64(i64 %arg0, i64 %arg1, i32 %arg2)108 %ret = call i64 @llvm.smul.fix.sat.i64(i64 %arg0, i64 %arg1, i32 %arg2)109 ret i64 %ret110}111 112declare i64 @llvm.umul.fix.i64(i64, i64, i32)113define i64 @umul_fix(i64 %arg0, i64 %arg1, i32 %arg2) {114 ; CHECK: immarg operand has non-immediate parameter115 ; CHECK-NEXT: i32 %arg2116 ; CHECK-NEXT: %ret = call i64 @llvm.umul.fix.i64(i64 %arg0, i64 %arg1, i32 %arg2)117 %ret = call i64 @llvm.umul.fix.i64(i64 %arg0, i64 %arg1, i32 %arg2)118 ret i64 %ret119}120 121declare i64 @llvm.umul.fix.sat.i64(i64, i64, i32)122define i64 @umul_fix_sat(i64 %arg0, i64 %arg1, i32 %arg2) {123 ; CHECK: immarg operand has non-immediate parameter124 ; CHECK-NEXT: i32 %arg2125 ; CHECK-NEXT: %ret = call i64 @llvm.umul.fix.sat.i64(i64 %arg0, i64 %arg1, i32 %arg2)126 %ret = call i64 @llvm.umul.fix.sat.i64(i64 %arg0, i64 %arg1, i32 %arg2)127 ret i64 %ret128}129 130declare ptr @llvm.invariant.start.p0(i64, ptr)131define void @test_invariant_start(i64 %arg0, ptr %ptr) {132 ; CHECK: immarg operand has non-immediate parameter133 ; CHECK-NEXT: i64 %arg0134 ; CHECK-NEXT: call ptr @llvm.invariant.start.p0(i64 %arg0, ptr %ptr)135 call ptr @llvm.invariant.start.p0(i64 %arg0, ptr %ptr)136 ret void137}138 139declare void @llvm.invariant.end.p0(ptr, i64, ptr)140define void @test_invariant_end(ptr %scope, i64 %arg1, ptr %ptr) {141 ; CHECK: immarg operand has non-immediate parameter142 ; CHECK-NEXT: i64 %arg1143 ; CHECK-NEXT: call void @llvm.invariant.end.p0(ptr %scope, i64 %arg1, ptr %ptr)144 call void @llvm.invariant.end.p0(ptr %scope, i64 %arg1, ptr %ptr)145 ret void146}147 148declare void @llvm.prefetch(ptr, i32, i32, i32)149define void @test_prefetch(ptr %ptr, i32 %arg0, i32 %arg1) {150 ; CHECK: immarg operand has non-immediate parameter151 ; CHECK-NEXT: i32 %arg0152 ; CHECK-NEXT: call void @llvm.prefetch.p0(ptr %ptr, i32 %arg0, i32 0, i32 0)153 ; CHECK: immarg operand has non-immediate parameter154 ; CHECK-NEXT: i32 %arg1155 call void @llvm.prefetch(ptr %ptr, i32 %arg0, i32 0, i32 0)156 call void @llvm.prefetch(ptr %ptr, i32 0, i32 %arg1, i32 0)157 ret void158}159 160declare ptr @llvm.localrecover(ptr, ptr, i32)161define void @test_localrecover(ptr %func, ptr %fp, i32 %idx) {162 ; CHECK: immarg operand has non-immediate parameter163 ; CHECK-NEXT: i32 %idx164 ; CHECK-NEXT: call ptr @llvm.localrecover(ptr %func, ptr %fp, i32 %idx)165 call ptr @llvm.localrecover(ptr %func, ptr %fp, i32 %idx)166 ret void167}168 169declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)170 171define private void @f() {172 ret void173}174 175define void @calls_statepoint(ptr addrspace(1) %arg0, i64 %arg1, i32 %arg2, i32 %arg4, i32 %arg5) gc "statepoint-example" {176 ; CHECK: immarg operand has non-immediate parameter177 ; CHECK-NEXT: i64 %arg1178 ; CHECK-NEXT: %safepoint0 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 %arg1, i32 0, ptr @f, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)179 ; CHECK: immarg operand has non-immediate parameter180 ; CHECK-NEXT: i32 %arg2181 ; CHECK-NEXT: %safepoint1 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 %arg2, ptr @f, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)182 ; CHECK: immarg operand has non-immediate parameter183 ; CHECK-NEXT: i32 %arg4184 ; CHECK-NEXT: %safepoint2 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr @f, i32 %arg4, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)185 ; CHECK: immarg operand has non-immediate parameter186 ; CHECK-NEXT: i32 %arg5187 ; CHECK-NEXT: %safepoint3 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr @f, i32 0, i32 %arg5, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)188 %safepoint0 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 %arg1, i32 0, ptr @f, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)189 %safepoint1 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 %arg2, ptr @f, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)190 %safepoint2 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr @f, i32 %arg4, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)191 %safepoint3 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr @f, i32 0, i32 %arg5, i32 0, i32 5, i32 0, i32 0, i32 0, i32 10, i32 0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0, ptr addrspace(1) %arg0)192 ret void193}194 195declare void @llvm.experimental.patchpoint.void(i64, i32, ptr, i32, ...)196declare i64 @llvm.experimental.patchpoint.i64(i64, i32, ptr, i32, ...)197 198define void @test_patchpoint(i64 %arg0, i32 %arg1, i32 %arg2) {199 ; CHECK: immarg operand has non-immediate parameter200 ; CHECK-NEXT: i64 %arg0201 ; CHECK-NEXT: call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 %arg0, i32 4, ptr null, i32 0)202 ; CHECK: immarg operand has non-immediate parameter203 ; CHECK-NEXT: i32 %arg1204 ; CHECK-NEXT: call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 0, i32 %arg1, ptr null, i32 0)205 ; CHECK: immarg operand has non-immediate parameter206 ; CHECK-NEXT: i32 %arg2207 ; CHECK-NEXT: call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 0, i32 4, ptr null, i32 %arg2)208 ; CHECK: immarg operand has non-immediate parameter209 ; CHECK-NEXT: i64 %arg0210 ; CHECK-NEXT: %patchpoint0 = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 %arg0, i32 4, ptr null, i32 0)211 ; CHECK: immarg operand has non-immediate parameter212 ; CHECK-NEXT: i32 %arg1213 ; CHECK-NEXT: %patchpoint1 = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 0, i32 %arg1, ptr null, i32 0)214 ; CHECK: immarg operand has non-immediate parameter215 ; CHECK-NEXT: i32 %arg2216 ; CHECK-NEXT: %patchpoint2 = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 0, i32 4, ptr null, i32 %arg2)217 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 %arg0, i32 4, ptr null, i32 0)218 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 0, i32 %arg1, ptr null, i32 0)219 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 0, i32 4, ptr null, i32 %arg2)220 %patchpoint0 = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 %arg0, i32 4, ptr null, i32 0)221 %patchpoint1 = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 0, i32 %arg1, ptr null, i32 0)222 %patchpoint2 = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 0, i32 4, ptr null, i32 %arg2)223 ret void224}225 226declare void @llvm.hwasan.check.memaccess(ptr, ptr, i32)227 228define void @hwasan_check_memaccess(ptr %arg0,ptr %arg1, i32 %arg2) {229 ; CHECK: immarg operand has non-immediate parameter230 ; CHECK: i32 %arg2231 ; CHECK: call void @llvm.hwasan.check.memaccess(ptr %arg0, ptr %arg1, i32 %arg2)232 call void @llvm.hwasan.check.memaccess(ptr %arg0,ptr %arg1, i32 %arg2)233 ret void234}235 236declare void @llvm.eh.sjlj.callsite(i32)237 238define void @eh_sjlj_callsite(i32 %arg0) {239 ; CHECK: immarg operand has non-immediate parameter240 ; CHECK: i32 %arg0241 ; CHECK: call void @llvm.eh.sjlj.callsite(i32 %arg0)242 call void @llvm.eh.sjlj.callsite(i32 %arg0)243 ret void244}245