1; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s 2 3declare void @llvm.arm.cdp(i32, i32, i32, i32, i32, i32) nounwind 4 5define void @cdp(i32 %a) #0 { 6 ; CHECK: immarg operand has non-immediate parameter 7 ; CHECK-NEXT: %load = load i32, i32* %a.addr, align 4 8 ; CHECK-NEXT: call void @llvm.arm.cdp(i32 %load, i32 2, i32 3, i32 4, i32 5, i32 6) 9 %a.addr = alloca i32, align 4 10 store i32 %a, i32* %a.addr, align 4 11 %load = load i32, i32* %a.addr, align 4 12 call void @llvm.arm.cdp(i32 %load, i32 2, i32 3, i32 4, i32 5, i32 6) 13 ret void 14} 15 16declare void @llvm.arm.cdp2(i32, i32, i32, i32, i32, i32) nounwind 17define void @cdp2(i32 %a) #0 { 18 ; CHECK: immarg operand has non-immediate parameter 19 ; CHECK-NEXT: %load = load i32, i32* %a.addr, align 4 20 ; CHECK-NEXT: call void @llvm.arm.cdp2(i32 %load, i32 2, i32 3, i32 4, i32 5, i32 6) 21 %a.addr = alloca i32, align 4 22 store i32 %a, i32* %a.addr, align 4 23 %load = load i32, i32* %a.addr, align 4 24 call void @llvm.arm.cdp2(i32 %load, i32 2, i32 3, i32 4, i32 5, i32 6) 25 ret void 26} 27 28declare { i32, i32 } @llvm.arm.mrrc(i32, i32, i32) nounwind 29define void @mrrc(i32 %arg0, i32 %arg1, i32 %arg2) #0 { 30 ; CHECK: immarg operand has non-immediate parameter 31 ; CHECK-NEXT: i32 %arg0 32 ; CHECK-NEXT: %ret0 = call { i32, i32 } @llvm.arm.mrrc(i32 %arg0, i32 0, i32 0) 33 %ret0 = call { i32, i32 } @llvm.arm.mrrc(i32 %arg0, i32 0, i32 0) 34 35 ; CHECK: immarg operand has non-immediate parameter 36 ; CHECK-NEXT: i32 %arg1 37 ; CHECK-NEXT: %ret1 = call { i32, i32 } @llvm.arm.mrrc(i32 0, i32 %arg1, i32 0) 38 %ret1 = call { i32, i32 } @llvm.arm.mrrc(i32 0, i32 %arg1, i32 0) 39 40 ; CHECK: immarg operand has non-immediate parameter 41 ; CHECK-NEXT: i32 %arg2 42 ; CHECK-NEXT: %ret2 = call { i32, i32 } @llvm.arm.mrrc(i32 0, i32 0, i32 %arg2) 43 %ret2 = call { i32, i32 } @llvm.arm.mrrc(i32 0, i32 0, i32 %arg2) 44 ret void 45} 46 47declare { i32, i32 } @llvm.arm.mrrc2(i32, i32, i32) nounwind 48define void @mrrc2(i32 %arg0, i32 %arg1, i32 %arg2) #0 { 49 ; CHECK: immarg operand has non-immediate parameter 50 ; CHECK-NEXT: i32 %arg0 51 ; CHECK-NEXT: %ret0 = call { i32, i32 } @llvm.arm.mrrc2(i32 %arg0, i32 0, i32 0) 52 %ret0 = call { i32, i32 } @llvm.arm.mrrc2(i32 %arg0, i32 0, i32 0) 53 54 ; CHECK: immarg operand has non-immediate parameter 55 ; CHECK-NEXT: i32 %arg1 56 ; CHECK-NEXT: %ret1 = call { i32, i32 } @llvm.arm.mrrc2(i32 0, i32 %arg1, i32 0) 57 %ret1 = call { i32, i32 } @llvm.arm.mrrc2(i32 0, i32 %arg1, i32 0) 58 59 ; CHECK: immarg operand has non-immediate parameter 60 ; CHECK-NEXT: i32 %arg2 61 ; CHECK-NEXT: %ret2 = call { i32, i32 } @llvm.arm.mrrc2(i32 0, i32 0, i32 %arg2) 62 %ret2 = call { i32, i32 } @llvm.arm.mrrc2(i32 0, i32 0, i32 %arg2) 63 ret void 64} 65 66declare void @llvm.arm.mcrr(i32, i32, i32, i32, i32) nounwind 67define void @mcrr(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4) { 68 ; CHECK: immarg operand has non-immediate parameter 69 ; CHECK-NEXT: i32 %arg0 70 ; CHECK-NEXT: call void @llvm.arm.mcrr(i32 %arg0, i32 1, i32 2, i32 3, i32 4) 71 call void @llvm.arm.mcrr(i32 %arg0, i32 1, i32 2, i32 3, i32 4) 72 73 ; CHECK: immarg operand has non-immediate parameter 74 ; CHECK-NEXT: i32 %arg1 75 ; CHECK-NEXT: call void @llvm.arm.mcrr(i32 0, i32 %arg1, i32 2, i32 3, i32 4) 76 call void @llvm.arm.mcrr(i32 0, i32 %arg1, i32 2, i32 3, i32 4) 77 78 ; CHECK: immarg operand has non-immediate parameter 79 ; CHECK-NEXT: i32 %arg4 80 ; CHECK-NEXT: call void @llvm.arm.mcrr(i32 0, i32 1, i32 2, i32 3, i32 %arg4) 81 call void @llvm.arm.mcrr(i32 0, i32 1, i32 2, i32 3, i32 %arg4) 82 ret void 83} 84 85declare void @llvm.arm.mcrr2(i32, i32, i32, i32, i32) nounwind 86define void @mcrr2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4) { 87 ; CHECK: immarg operand has non-immediate parameter 88 ; CHECK-NEXT: i32 %arg0 89 ; CHECK-NEXT: call void @llvm.arm.mcrr2(i32 %arg0, i32 1, i32 2, i32 3, i32 4) 90 call void @llvm.arm.mcrr2(i32 %arg0, i32 1, i32 2, i32 3, i32 4) 91 92 ; CHECK: immarg operand has non-immediate parameter 93 ; CHECK-NEXT: i32 %arg1 94 ; CHECK-NEXT: call void @llvm.arm.mcrr2(i32 0, i32 %arg1, i32 2, i32 3, i32 4) 95 call void @llvm.arm.mcrr2(i32 0, i32 %arg1, i32 2, i32 3, i32 4) 96 97 ; CHECK: immarg operand has non-immediate parameter 98 ; CHECK-NEXT: i32 %arg4 99 ; CHECK-NEXT: call void @llvm.arm.mcrr2(i32 0, i32 1, i32 2, i32 3, i32 %arg4) 100 call void @llvm.arm.mcrr2(i32 0, i32 1, i32 2, i32 3, i32 %arg4) 101 ret void 102} 103 104declare i32 @llvm.arm.space(i32, i32) nounwind 105define i32 @space(i32 %arg0, i32 %arg1) { 106 ; CHECK: immarg operand has non-immediate parameter 107 ; CHECK-NEXT: i32 %arg0 108 ; CHECK-NEXT: call i32 @llvm.arm.space(i32 %arg0, i32 %arg1) 109 %space = call i32 @llvm.arm.space(i32 %arg0, i32 %arg1) 110 ret i32 %space 111} 112