diff options
Diffstat (limited to 'llvm/test/Verifier')
-rw-r--r-- | llvm/test/Verifier/AMDGPU/intrinsic-amdgcn-call-whole-wave.ll | 46 | ||||
-rw-r--r-- | llvm/test/Verifier/AMDGPU/wmma-f8f6f4.ll | 124 | ||||
-rw-r--r-- | llvm/test/Verifier/intrinsic-immarg.ll | 20 | ||||
-rw-r--r-- | llvm/test/Verifier/nofree_metadata.ll | 15 | ||||
-rw-r--r-- | llvm/test/Verifier/opaque-ptr.ll | 14 | ||||
-rw-r--r-- | llvm/test/Verifier/tokenlike1-without-asserts.ll | 12 | ||||
-rw-r--r-- | llvm/test/Verifier/tokenlike5.ll | 7 | ||||
-rw-r--r-- | llvm/test/Verifier/tokenlike6.ll | 7 | ||||
-rw-r--r-- | llvm/test/Verifier/tokenlike7.ll | 8 |
9 files changed, 225 insertions, 28 deletions
diff --git a/llvm/test/Verifier/AMDGPU/intrinsic-amdgcn-call-whole-wave.ll b/llvm/test/Verifier/AMDGPU/intrinsic-amdgcn-call-whole-wave.ll new file mode 100644 index 0000000..a744bf3 --- /dev/null +++ b/llvm/test/Verifier/AMDGPU/intrinsic-amdgcn-call-whole-wave.ll @@ -0,0 +1,46 @@ +; RUN: not llvm-as %s -disable-output 2>&1 | FileCheck %s + +define amdgpu_cs void @indirect(ptr %fn, i32 %x) { + ; CHECK: Indirect whole wave calls are not allowed + %whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr %fn, i32 %x) + ret void +} + +declare amdgpu_gfx_whole_wave void @variadic_callee(i1 %active, i32 %x, ...) + +define amdgpu_cs void @variadic(ptr %fn, i32 %x) { + ; CHECK: Variadic whole wave calls are not allowed + %whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @variadic_callee, i32 %x) + ret void +} + +declare amdgpu_gfx void @bad_cc_callee(i1 %active, i32 %x) + +define amdgpu_cs void @bad_cc(i32 %x) { + ; CHECK: Callee must have the amdgpu_gfx_whole_wave calling convention + %whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @bad_cc_callee, i32 %x) + ret void +} + +declare amdgpu_gfx_whole_wave i32 @no_i1_callee(i32 %active, i32 %y, i32 %z) + +define amdgpu_cs void @no_i1(i32 %x) { + ; CHECK: Callee must have i1 as its first argument + %whatever = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @no_i1_callee, i32 %x, i32 0) + ret void +} + +declare amdgpu_gfx_whole_wave i32 @good_callee(i1 %active, i32 %x, i32 inreg %y) + +define amdgpu_cs void @bad_args(i32 %x) { + ; CHECK: Call argument count must match callee argument count + %whatever.0 = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @good_callee, i32 %x) + + ; CHECK: Argument types must match + %whatever.1 = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @good_callee, i32 %x, i64 inreg 0) + + ; CHECK: Argument inreg attributes must match + %whatever.2 = call i32(ptr, ...) @llvm.amdgcn.call.whole.wave(ptr @good_callee, i32 %x, i32 0) + + ret void +} diff --git a/llvm/test/Verifier/AMDGPU/wmma-f8f6f4.ll b/llvm/test/Verifier/AMDGPU/wmma-f8f6f4.ll index af0d7f1..553c64d 100644 --- a/llvm/test/Verifier/AMDGPU/wmma-f8f6f4.ll +++ b/llvm/test/Verifier/AMDGPU/wmma-f8f6f4.ll @@ -24,6 +24,46 @@ bb: ret void } +; CHECK: operand 1 must be 8, 12 or 16 element i32 vector +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i64.v16i32(i32 0, <16 x i64> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: <16 x i64> %A +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i64_fp8___v16i32_fp8(<16 x i64> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i64.v16i32(i32 0, <16 x i64> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: operand 3 must be 8, 12 or 16 element i32 vector +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i64(i32 0, <16 x i32> %A, i32 0, <16 x i64> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: <16 x i64> %B +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i32_fp8___v16i64_fp8(<16 x i32> %A, <16 x i64> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i64(i32 0, <16 x i32> %A, i32 0, <16 x i64> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: operand 1 must be 8, 12 or 16 element i32 vector +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v16i64.v16i32(i32 0, <16 x i64> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) +; CHECK-NEXT: <16 x i64> %A +define amdgpu_ps void @test_wmma_scale16_f32_16x16x128_f8f6f4___v16i64_fp8___v16i32_fp8(<16 x i64> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v16i64.v16i32(i32 0, <16 x i64> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: operand 3 must be 8, 12 or 16 element i32 vector +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i64(i32 0, <16 x i32> %A, i32 0, <16 x i64> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) +; CHECK-NEXT: <16 x i64> %B +define amdgpu_ps void @test_wmma_scale16_f32_16x16x128_f8f6f4___v16i32_fp8___v16i64_fp8(<16 x i32> %A, <16 x i64> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i64(i32 0, <16 x i32> %A, i32 0, <16 x i64> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + ; -------------------------------------------------------------------- ; Impossible vector types ; -------------------------------------------------------------------- @@ -48,6 +88,26 @@ bb: ret void } +; CHECK: operand 1 must be 8, 12 or 16 element i32 vector +; CHECK-NEXT: call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v15i32.v16i32(i32 0, <15 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: <15 x i32> %A +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v15i32_fp8___v16i32_fp8(<15 x i32> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v15i32.v16i32(i32 0, <15 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: operand 3 must be 8, 12 or 16 element i32 vector +; CHECK-NEXT: call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v15i32(i32 0, <16 x i32> %A, i32 0, <15 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: <15 x i32> %B +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i32_fp8___v15i32_fp8(<16 x i32> %A, <15 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v15i32(i32 0, <16 x i32> %A, i32 0, <15 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + ; -------------------------------------------------------------------- ; Out of bounds format ; -------------------------------------------------------------------- @@ -72,6 +132,26 @@ bb: ret void } +; CHECK: invalid value for matrix format +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 5, <16 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: i32 5 +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i32_invalid0___v16i32_fp8(<16 x i32> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 5, <16 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: invalid value for matrix format +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %A, i32 5, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: i32 5 +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i32_fp8___v16i32_invalid1(<16 x i32> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %A, i32 5, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + ; -------------------------------------------------------------------- ; Incorrect signature for format cases (IR vector too small) ; -------------------------------------------------------------------- @@ -163,3 +243,47 @@ bb: store <8 x float> %res, ptr addrspace(1) %out ret void } + +; CHECK: invalid vector type for format +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v8i32.v16i32(i32 2, <8 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: <8 x i32> %A +; CHECK-NEXT: i32 2 +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v8i32_fp6___v16i32_fp8(<8 x i32> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v8i32.v16i32(i32 2, <8 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: invalid vector type for format +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v8i32(i32 0, <16 x i32> %A, i32 2, <8 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) +; CHECK-NEXT: <8 x i32> %B +; CHECK-NEXT: i32 2 +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i32_fp8___v8i32_fp6(<16 x i32> %A, <8 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v8i32.v16i32(i32 0, <16 x i32> %A, i32 2, <8 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: invalid vector type for format +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v8i32.v16i32(i32 3, <8 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) +; CHECK-NEXT: <8 x i32> %A +; CHECK-NEXT: i32 3 +define amdgpu_ps void @test_wmma_scale16_f32_16x16x128_f8f6f4___v8i32_bf6___v16i32_fp8(<8 x i32> %A, <16 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v8i32.v16i32(i32 3, <8 x i32> %A, i32 0, <16 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} + +; CHECK: invalid vector type for format +; CHECK-NEXT: %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v16i32.v8i32(i32 0, <16 x i32> %A, i32 3, <8 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) +; CHECK-NEXT: <8 x i32> %B +; CHECK-NEXT: i32 3 +define amdgpu_ps void @test_wmma_scale_f32_16x16x128_f8f6f4___v16i32_fp8___v8i32_bf6(<16 x i32> %A, <8 x i32> %B, <8 x float> %C, ptr addrspace(1) %out) { +bb: + %res = call <8 x float> @llvm.amdgcn.wmma.scale16.f32.16x16x128.f8f6f4.v8f32.v8i32.v16i32(i32 0, <16 x i32> %A, i32 3, <8 x i32> %B, i16 0, <8 x float> %C, i32 0, i32 0, i64 0, i32 0, i32 0, i64 0, i1 false, i1 false) + store <8 x float> %res, ptr addrspace(1) %out + ret void +} diff --git a/llvm/test/Verifier/intrinsic-immarg.ll b/llvm/test/Verifier/intrinsic-immarg.ll index c1bb932..d5aef3d 100644 --- a/llvm/test/Verifier/intrinsic-immarg.ll +++ b/llvm/test/Verifier/intrinsic-immarg.ll @@ -163,26 +163,6 @@ define void @test_scatter_8i32(<8 x i32> %a1, <8 x ptr> %ptr, <8 x i1> %mask, i3 ret void } -declare void @llvm.lifetime.start.p0(i64, ptr) -define void @test_lifetime_start(i64 %arg0) { - ; CHECK: immarg operand has non-immediate parameter - ; CHECK-NEXT: i64 %arg0 - ; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 %arg0, ptr %ptr) - %ptr = alloca i64 - call void @llvm.lifetime.start.p0(i64 %arg0, ptr %ptr) - ret void -} - -declare void @llvm.lifetime.end.p0(i64, ptr) -define void @test_lifetime_end(i64 %arg0) { - ; CHECK: immarg operand has non-immediate parameter - ; CHECK-NEXT: i64 %arg0 - ; CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 %arg0, ptr %ptr) - %ptr = alloca i64 - call void @llvm.lifetime.end.p0(i64 %arg0, ptr %ptr) - ret void -} - declare ptr @llvm.invariant.start.p0(i64, ptr) define void @test_invariant_start(i64 %arg0, ptr %ptr) { ; CHECK: immarg operand has non-immediate parameter diff --git a/llvm/test/Verifier/nofree_metadata.ll b/llvm/test/Verifier/nofree_metadata.ll new file mode 100644 index 0000000..e04f5b9 --- /dev/null +++ b/llvm/test/Verifier/nofree_metadata.ll @@ -0,0 +1,15 @@ +; RUN: not llvm-as < %s 2>&1 | FileCheck %s + +declare ptr @dummy() + +; CHECK: nofree applies only to inttoptr instruction +define void @test_not_inttoptr() { + call ptr @dummy(), !nofree !{} + ret void +} + +; CHECK: nofree metadata must be empty +define void @test_invalid_arg(i32 %p) { + inttoptr i32 %p to ptr, !nofree !{i32 0} + ret void +} diff --git a/llvm/test/Verifier/opaque-ptr.ll b/llvm/test/Verifier/opaque-ptr.ll index 10e43a4..3ac9044 100644 --- a/llvm/test/Verifier/opaque-ptr.ll +++ b/llvm/test/Verifier/opaque-ptr.ll @@ -40,13 +40,13 @@ define void @atomicrmw(ptr %a, i32 %i) { define void @opaque_mangle() { ; CHECK-LABEL: @opaque_mangle( ; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8 -; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr [[A]]) -; CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr [[A]]) +; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr [[A]]) +; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr [[A]]) ; CHECK-NEXT: ret void ; %a = alloca i64 - call void @llvm.lifetime.start.p0(i64 8, ptr %a) - call void @llvm.lifetime.end.p0(i64 8, ptr %a) + call void @llvm.lifetime.start.p0(ptr %a) + call void @llvm.lifetime.end.p0(ptr %a) ret void } @@ -65,10 +65,8 @@ define void @intrinsic_calls(ptr %a) { ret void } -; CHECK: @llvm.lifetime.start.p0 -; CHECK: @llvm.lifetime.end.p0 -declare void @llvm.lifetime.start.p0(i64, ptr nocapture) -declare void @llvm.lifetime.end.p0(i64, ptr nocapture) +declare void @llvm.lifetime.start.p0(ptr nocapture) +declare void @llvm.lifetime.end.p0(ptr nocapture) declare <2 x i32> @llvm.masked.load.v2i32.p0(ptr, i32, <2 x i1>, <2 x i32>) declare void @llvm.masked.store.v2i32.p0(<2 x i32>, ptr, i32, <2 x i1>) diff --git a/llvm/test/Verifier/tokenlike1-without-asserts.ll b/llvm/test/Verifier/tokenlike1-without-asserts.ll new file mode 100644 index 0000000..ef7ac00 --- /dev/null +++ b/llvm/test/Verifier/tokenlike1-without-asserts.ll @@ -0,0 +1,12 @@ +; REQUIRES: !asserts +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +define void @f(target("dx.RawBuffer", half, 1, 0) %A, target("dx.RawBuffer", half, 1, 0) %B) { +entry: + br label %bb + +bb: + %phi = phi target("dx.RawBuffer", half, 1, 0) [ %A, %bb ], [ %B, %entry] +; CHECK: PHI nodes cannot have token type! + br label %bb +} diff --git a/llvm/test/Verifier/tokenlike5.ll b/llvm/test/Verifier/tokenlike5.ll new file mode 100644 index 0000000..ea36f37 --- /dev/null +++ b/llvm/test/Verifier/tokenlike5.ll @@ -0,0 +1,7 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +define void @f(target("dx.RawBuffer", half, 1, 0) %A) { +entry: + ret void +} +; CHECK: Function takes token but isn't an intrinsic diff --git a/llvm/test/Verifier/tokenlike6.ll b/llvm/test/Verifier/tokenlike6.ll new file mode 100644 index 0000000..f24a942 --- /dev/null +++ b/llvm/test/Verifier/tokenlike6.ll @@ -0,0 +1,7 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +define target("dx.RawBuffer", half, 1, 0) @f() { +entry: + ret target("dx.RawBuffer", half, 1, 0) poison +} +; CHECK: Function returns a token but isn't an intrinsic diff --git a/llvm/test/Verifier/tokenlike7.ll b/llvm/test/Verifier/tokenlike7.ll new file mode 100644 index 0000000..c745493 --- /dev/null +++ b/llvm/test/Verifier/tokenlike7.ll @@ -0,0 +1,8 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +define void @f() { +entry: + call target("dx.RawBuffer", half, 1, 0) () poison () + ret void +} +; CHECK: Return type cannot be token for indirect call! |