brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 2ddf615 Raw
125 lines · plain
1; RUN: opt -S -dxil-resource-access %s | FileCheck %s2 3target triple = "dxil-pc-shadermodel6.6-compute"4 5; CHECK-LABEL: define void @storef32_struct6define void @storef32_struct(i32 %index, float %data) {7  %buffer = call target("dx.RawBuffer", float, 1, 0, 0)8      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)9 10  ; CHECK-NOT: @llvm.dx.resource.getpointer11  %ptr = call ptr @llvm.dx.resource.getpointer(12      target("dx.RawBuffer", float, 1, 0, 0) %buffer, i32 %index)13 14  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_f32_1_0_0t.f32(target("dx.RawBuffer", float, 1, 0, 0) %buffer, i32 %index, i32 0, float %data)15  store float %data, ptr %ptr16 17  ret void18}19 20; CHECK-LABEL: define void @storef32_byte21define void @storef32_byte(i32 %offset, float %data) {22  %buffer = call target("dx.RawBuffer", i8, 1, 0, 0)23      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)24 25  ; CHECK-NOT: @llvm.dx.resource.getpointer26  %ptr = call ptr @llvm.dx.resource.getpointer(27      target("dx.RawBuffer", i8, 1, 0, 0) %buffer, i32 %offset)28 29  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_i8_1_0_0t.f32(target("dx.RawBuffer", i8, 1, 0, 0) %buffer, i32 %offset, i32 0, float %data)30  store float %data, ptr %ptr31 32  ret void33}34 35; CHECK-LABEL: define void @storev4f32_struct36define void @storev4f32_struct(i32 %index, <4 x float> %data) {37  %buffer = call target("dx.RawBuffer", <4 x float>, 1, 0, 0)38      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)39 40  ; CHECK-NOT: @llvm.dx.resource.getpointer41  %ptr = call ptr @llvm.dx.resource.getpointer(42      target("dx.RawBuffer", <4 x float>, 1, 0, 0) %buffer, i32 %index)43 44  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_v4f32_1_0_0t.v4f32(target("dx.RawBuffer", <4 x float>, 1, 0, 0) %buffer, i32 %index, i32 0, <4 x float> %data)45  store <4 x float> %data, ptr %ptr46 47  ret void48}49 50; CHECK-LABEL: define void @storev4f32_byte51define void @storev4f32_byte(i32 %offset, <4 x float> %data) {52  %buffer = call target("dx.RawBuffer", i8, 1, 0, 0)53      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)54 55  ; CHECK-NOT: @llvm.dx.resource.getpointer56  %ptr = call ptr @llvm.dx.resource.getpointer(57      target("dx.RawBuffer", i8, 1, 0, 0) %buffer, i32 %offset)58 59  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_i8_1_0_0t.v4f32(target("dx.RawBuffer", i8, 1, 0, 0) %buffer, i32 %offset, i32 0, <4 x float> %data)60  store <4 x float> %data, ptr %ptr61 62  ret void63}64 65; CHECK-LABEL: define void @storeelements66define void @storeelements(i32 %index, <4 x float> %dataf32, <4 x i32> %datai32) {67  %buffer = call target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 1, 0, 0)68      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)69 70  ; CHECK-NOT: @llvm.dx.resource.getpointer71  %ptr = call ptr @llvm.dx.resource.getpointer(72      target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 1, 0, 0) %buffer,73      i32 %index)74 75  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_sl_v4f32v4i32s_1_0_0t.v4f32(target("dx.RawBuffer", { <4 x float>, <4 x i32> }, 1, 0, 0) %buffer, i32 %index, i32 0, <4 x float> %dataf32)76  store <4 x float> %dataf32, ptr %ptr77 78  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_sl_v4f32v4i32s_1_0_0t.v4i32(target("dx.RawBuffer", { <4 x float>, <4 x i32> }, 1, 0, 0) %buffer, i32 %index, i32 16, <4 x i32> %datai32)79  %addri32 = getelementptr inbounds nuw i8, ptr %ptr, i32 1680  store <4 x i32> %datai32, ptr %addri3281 82  ret void83}84 85; CHECK-LABEL: define void @storenested86define void @storenested(i32 %index, i32 %datai32, <4 x float> %dataf32, <3 x half> %dataf16) {87  %buffer = call88      target("dx.RawBuffer", {i32, {<4 x float>, <3 x half>}}, 1, 0, 0)89      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)90 91  ; CHECK-NOT: @llvm.dx.resource.getpointer92  %ptr = call ptr @llvm.dx.resource.getpointer(93      target("dx.RawBuffer", {i32, {<4 x float>, <3 x half>}}, 1, 0, 0) %buffer,94      i32 %index)95 96  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_sl_i32sl_v4f32v3f16ss_1_0_0t.i32(target("dx.RawBuffer", { i32, { <4 x float>, <3 x half> } }, 1, 0, 0) %buffer, i32 %index, i32 0, i32 %datai32)97  store i32 %datai32, ptr %ptr98 99  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_sl_i32sl_v4f32v3f16ss_1_0_0t.v4f32(target("dx.RawBuffer", { i32, { <4 x float>, <3 x half> } }, 1, 0, 0) %buffer, i32 %index, i32 4, <4 x float> %dataf32)100  %addrf32 = getelementptr inbounds nuw i8, ptr %ptr, i32 4101  store <4 x float> %dataf32, ptr %addrf32102 103  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_sl_i32sl_v4f32v3f16ss_1_0_0t.v3f16(target("dx.RawBuffer", { i32, { <4 x float>, <3 x half> } }, 1, 0, 0) %buffer, i32 %index, i32 20, <3 x half> %dataf16)104  %addrf16 = getelementptr inbounds nuw i8, ptr %ptr, i32 20105  store <3 x half> %dataf16, ptr %addrf16106 107  ret void108}109 110; byteaddressbuf.Store<int64_t4>111; CHECK-LABEL: define void @storev4f64_byte112define void @storev4f64_byte(i32 %offset, <4 x double> %data) {113  %buffer = call target("dx.RawBuffer", i8, 1, 0, 0)114      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)115 116  ; CHECK-NOT: @llvm.dx.resource.getpointer117  %ptr = call ptr @llvm.dx.resource.getpointer(118      target("dx.RawBuffer", i8, 1, 0, 0) %buffer, i32 %offset)119 120  ; CHECK: call void @llvm.dx.resource.store.rawbuffer.tdx.RawBuffer_i8_1_0_0t.v4f64(target("dx.RawBuffer", i8, 1, 0, 0) %buffer, i32 %offset, i32 0, <4 x double> %data)121  store <4 x double> %data, ptr %ptr122 123  ret void124}125