|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: opt -S -dxil-forward-handle-accesses %s | FileCheck %s |
| 3 | + |
| 4 | +%"class.hlsl::RWStructuredBuffer" = type { target("dx.RawBuffer", i32, 1, 0) } |
| 5 | +@global = internal unnamed_addr global %"class.hlsl::RWStructuredBuffer" poison, align 4 |
| 6 | +@name = private unnamed_addr constant [5 x i8] c"dest\00", align 1 |
| 7 | + |
| 8 | + |
| 9 | +; NOTE: intent of this test is to confirm load target("dx.RawBuffer", i32, 1, 0) |
| 10 | +; is replaced with call @llvm.dx.resource.getpointer |
| 11 | +define void @CSMain() local_unnamed_addr { |
| 12 | +; CHECK-LABEL: define void @CSMain() local_unnamed_addr { |
| 13 | +; CHECK-NEXT: [[ENTRY:.*:]] |
| 14 | +; CHECK-NEXT: [[AGG_TMP_I1_SROA_0:%.*]] = alloca target("dx.RawBuffer", i32, 1, 0), align 8 |
| 15 | +; CHECK-NEXT: [[TMP0:%.*]] = tail call target("dx.RawBuffer", i32, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i32_1_0t(i32 0, i32 3, i32 1, i32 0, i1 false, ptr nonnull @name) |
| 16 | +; CHECK-NEXT: store target("dx.RawBuffer", i32, 1, 0) [[TMP0]], ptr @global, align 4 |
| 17 | +; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr @global, align 4 |
| 18 | +; CHECK-NEXT: store i32 [[TMP2]], ptr [[AGG_TMP_I1_SROA_0]], align 8 |
| 19 | +; CHECK-NEXT: [[TMP3:%.*]] = tail call noundef nonnull align 4 dereferenceable(4) ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i32_1_0t(target("dx.RawBuffer", i32, 1, 0) [[TMP0]], i32 0) |
| 20 | +; CHECK-NEXT: store i32 0, ptr [[TMP3]], align 4 |
| 21 | +; CHECK-NEXT: ret void |
| 22 | +; |
| 23 | +entry: |
| 24 | + %alloca = alloca target("dx.RawBuffer", i32, 1, 0), align 8 |
| 25 | + %handle = tail call target("dx.RawBuffer", i32, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i32_1_0t(i32 0, i32 3, i32 1, i32 0, i1 false, ptr nonnull @name) |
| 26 | + store target("dx.RawBuffer", i32, 1, 0) %handle , ptr @global, align 4 |
| 27 | + %val = load i32, ptr @global, align 4 |
| 28 | + store i32 %val , ptr %alloca, align 8 |
| 29 | + %indirect = load target("dx.RawBuffer", i32, 1, 0), ptr %alloca, align 8 |
| 30 | + %buff = tail call noundef nonnull align 4 dereferenceable(4) ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i32_1_0t(target("dx.RawBuffer", i32, 1, 0) %indirect, i32 0) |
| 31 | + store i32 0, ptr %buff, align 4 |
| 32 | + ret void |
| 33 | +} |
0 commit comments