brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 3975fe8 Raw
108 lines · plain
1; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s2 3declare void @llvm.test.immarg.intrinsic.i32(i32 immarg)4declare void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> immarg)5declare void @llvm.test.immarg.intrinsic.f32(float immarg)6declare void @llvm.test.immarg.intrinsic.v2f32(<2 x float> immarg)7declare void @llvm.test.immarg.intrinsic.2ai32([2 x i32] immarg)8 9@gv = global i32 undef, align 410 11define void @call_llvm.test.immarg.intrinsic.i32(i32 %arg) {12; CHECK: immarg operand has non-immediate parameter13; CHECK-NEXT: i32 undef14; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.i32(i32 undef)15  call void @llvm.test.immarg.intrinsic.i32(i32 undef)16 17; CHECK: immarg operand has non-immediate parameter18; CHECK-NEXT: i32 %arg19; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.i32(i32 %arg)20  call void @llvm.test.immarg.intrinsic.i32(i32 %arg)21 22  ; CHECK: immarg operand has non-immediate parameter23  ; CHECK-NEXT: i32 ptrtoint (ptr @gv to i32)24  ; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.i32(i32 ptrtoint (ptr @gv to i32))25  call void @llvm.test.immarg.intrinsic.i32(i32 ptrtoint (ptr @gv to i32))26  ret void27}28 29define void @call_llvm.test.immarg.intrinsic.f32() {30; CHECK: immarg operand has non-immediate parameter31; CHECK-NEXT: float undef32; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.f32(float undef)33  call void @llvm.test.immarg.intrinsic.f32(float undef)34  ret void35}36 37define void @call_llvm.test.immarg.intrinsic.v2i32() {38; CHECK: immarg operand has non-immediate parameter39; CHECK-NEXT: <2 x i32> zeroinitializer40; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> zeroinitializer)41  call void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> zeroinitializer)42 43; CHECK: immarg operand has non-immediate parameter44; CHECK-NEXT: <2 x i32> <i32 1, i32 2>45; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> <i32 1, i32 2>)46  call void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> <i32 1, i32 2>)47 48; CHECK: immarg operand has non-immediate parameter49; CHECK-NEXT: <2 x i32> undef50; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> undef)51  call void @llvm.test.immarg.intrinsic.v2i32(<2 x i32> undef)52  ret void53}54 55define void @call_llvm.test.immarg.intrinsic.v2f32() {56; CHECK: immarg operand has non-immediate parameter57; CHECK-NEXT: <2 x float> zeroinitializer58; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.v2f32(<2 x float> zeroinitializer)59  call void @llvm.test.immarg.intrinsic.v2f32(<2 x float> zeroinitializer)60 61; CHECK: immarg operand has non-immediate parameter62; CHECK-NEXT: <2 x float> <float 1.000000e+00, float 2.000000e+00>63; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.v2f32(<2 x float> <float 1.000000e+00, float 2.000000e+00>)64  call void @llvm.test.immarg.intrinsic.v2f32(<2 x float> <float 1.0, float 2.0>)65  ret void66}67 68define void @call_llvm.test.immarg.intrinsic.2ai32() {69; CHECK: immarg operand has non-immediate parameter70; CHECK-NEXT: [2 x i32] zeroinitializer71; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.2ai32([2 x i32] zeroinitializer)72  call void @llvm.test.immarg.intrinsic.2ai32([2 x i32] zeroinitializer)73 74; CHECK: immarg operand has non-immediate parameter75; CHECK-NEXT: [2 x i32] [i32 1, i32 2]76; CHECK-NEXT: call void @llvm.test.immarg.intrinsic.2ai32([2 x i32] [i32 1, i32 2])77  call void @llvm.test.immarg.intrinsic.2ai32([2 x i32] [i32 1, i32 2])78  ret void79}80 81; CHECK: immarg attribute only applies to intrinsics82; CHECK-NEXT: ptr @not_an_intrinsic83declare void @not_an_intrinsic(i32 immarg)84 85declare void @llvm.test.intrinsic(i32)86declare void @func(i32)87 88define void @only_on_callsite() {89; CHECK: immarg attribute only applies to intrinsics90; CHECK-NEXT: call void @func(i32 immarg 0)91; CHECK-NEXT: immarg may not apply only to call sites92; CHECK-NEXT: i32 093; CHECK-NEXT: call void @func(i32 immarg 0)94  call void @func(i32 immarg 0)95 96; CHECK: immarg may not apply only to call sites97; CHECK-NEXT: i32 098; CHECK-NEXT: call void @llvm.test.intrinsic(i32 immarg 0)99  call void @llvm.test.intrinsic(i32 immarg 0)100  ret void101}102 103; CHECK: immarg attribute only applies to intrinsics104; CHECK: ptr @on_function_definition105define void @on_function_definition(i32 immarg %arg) {106  ret void107}108