brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 65c9a3e Raw
102 lines · plain
1; RUN: opt -S -dxil-resource-access -mtriple=dxil %s | FileCheck %s2 3; cbuffer CB {4;   float a1;     // offset  0, size  45;   int a2;       // offset  4, size  46;   bool a3;      // offset  8, size  47;   float16_t a4; // offset 12, size  28;   uint16_t a5;  // offset 14, size  29;   double a6;    // offset 16, size  810;   int64_t a7;   // offset 24, size  811; }12%__cblayout_CB = type <{ float, i32, i32, half, i16, double, i64 }>13 14@CB.cb = local_unnamed_addr global target("dx.CBuffer", %__cblayout_CB) poison15 16; CHECK: define void @f17define void @f(ptr %dst) {18entry:19  %CB.cb_h.i.i = tail call target("dx.CBuffer", %__cblayout_CB) @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)20  store target("dx.CBuffer", %__cblayout_CB) %CB.cb_h.i.i, ptr @CB.cb, align 421 22  ; CHECK: [[CB:%.*]] = load target("dx.CBuffer", %__cblayout_CB), ptr @CB.cb23  %CB.cb = load target("dx.CBuffer", %__cblayout_CB), ptr @CB.cb, align 824 25  ;; a126  ;27  ; CHECK: [[LOAD:%.*]] = call { float, float, float, float } @llvm.dx.resource.load.cbufferrow.4.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 0)28  ; CHECK: [[A1:%.*]] = extractvalue { float, float, float, float } [[LOAD]], 029  ; CHECK: store float [[A1]], ptr %dst30  %a1_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 0)31  %a1 = load float, ptr addrspace(2) %a1_ptr, align 432  store float %a1, ptr %dst, align 833 34  ;; a235  ;36  ; CHECK: [[LOAD:%.*]] = call { i32, i32, i32, i32 } @llvm.dx.resource.load.cbufferrow.4.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 0)37  ; CHECK: [[A2:%.*]] = extractvalue { i32, i32, i32, i32 } [[LOAD]], 138  ; CHECK: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr %dst, i32 439  ; CHECK: store i32 [[A2]], ptr [[PTR]]40  %a2_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 4)41  %a2 = load i32, ptr addrspace(2) %a2_ptr, align 442  %a2.i = getelementptr inbounds nuw i8, ptr %dst, i32 443  store i32 %a2, ptr %a2.i, align 844 45  ;; a346  ;47  ; CHECK: [[LOAD:%.*]] = call { i32, i32, i32, i32 } @llvm.dx.resource.load.cbufferrow.4.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 0)48  ; CHECK: [[A3:%.*]] = extractvalue { i32, i32, i32, i32 } [[LOAD]], 249  ; CHECK: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr %dst, i32 850  ; CHECK: store i32 [[A3]], ptr [[PTR]]51  %a3_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 8)52  %a3 = load i32, ptr addrspace(2) %a3_ptr, align 453  %a3.i = getelementptr inbounds nuw i8, ptr %dst, i32 854  store i32 %a3, ptr %a3.i, align 455 56  ;; a457  ;58  ; CHECK: [[LOAD:%.*]] = call { half, half, half, half, half, half, half, half } @llvm.dx.resource.load.cbufferrow.8.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 0)59  ; CHECK: [[A4:%.*]] = extractvalue { half, half, half, half, half, half, half, half } [[LOAD]], 660  ; CHECK: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr %dst, i32 1261  ; CHECK: store half [[A4]], ptr [[PTR]]62  %a4_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 12)63  %a4 = load half, ptr addrspace(2) %a4_ptr, align 264  %a4.i = getelementptr inbounds nuw i8, ptr %dst, i32 1265  store half %a4, ptr %a4.i, align 466 67  ;; a568  ;69  ; CHECK: [[LOAD:%.*]] = call { i16, i16, i16, i16, i16, i16, i16, i16 } @llvm.dx.resource.load.cbufferrow.8.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 0)70  ; CHECK: [[A5:%.*]] = extractvalue { i16, i16, i16, i16, i16, i16, i16, i16 } [[LOAD]], 771  ; CHECK: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr %dst, i32 1472  ; CHECK: store i16 [[A5]], ptr [[PTR]]73  %a5_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 14)74  %a5 = load i16, ptr addrspace(2) %a5_ptr, align 275  %a5.i = getelementptr inbounds nuw i8, ptr %dst, i32 1476  store i16 %a5, ptr %a5.i, align 277 78  ;; a679  ;80  ; CHECK: [[LOAD:%.*]] = call { double, double } @llvm.dx.resource.load.cbufferrow.2.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 1)81  ; CHECK: [[A6:%.*]] = extractvalue { double, double } [[LOAD]], 082  ; CHECK: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr %dst, i32 1683  ; CHECK: store double [[A6]], ptr [[PTR]]84  %a6_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 16)85  %a6 = load double, ptr addrspace(2) %a6_ptr, align 886  %a6.i = getelementptr inbounds nuw i8, ptr %dst, i32 1687  store double %a6, ptr %a6.i, align 888 89  ;; a790  ;91  ; CHECK: [[LOAD:%.*]] = call { i64, i64 } @llvm.dx.resource.load.cbufferrow.2.{{.*}}(target("dx.CBuffer", %__cblayout_CB) [[CB]], i32 1)92  ; CHECK: [[A7:%.*]] = extractvalue { i64, i64 } [[LOAD]], 193  ; CHECK: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr %dst, i32 2494  ; CHECK: store i64 [[A7]], ptr [[PTR]]95  %a7_ptr = call ptr addrspace(2) @llvm.dx.resource.getpointer(target("dx.CBuffer", %__cblayout_CB) %CB.cb, i32 24)96  %a7 = load i64, ptr addrspace(2) %a7_ptr, align 897  %a7.i = getelementptr inbounds nuw i8, ptr %dst, i32 2498  store i64 %a7, ptr %a7.i, align 899 100  ret void101}102