brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 85e3bb0 Raw
110 lines · plain
1; RUN: opt -S -passes='dxil-data-scalarization' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=SCHECK,CHECK2; RUN: opt -S -passes='dxil-data-scalarization,dxil-flatten-arrays' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=FCHECK,CHECK3 4; CHECK-LABEL: alloca_2d__vec_test5define void @alloca_2d__vec_test() {6  ; SCHECK:  alloca [2 x [4 x i32]], align 167  ; FCHECK:  alloca [8 x i32], align 168  ; CHECK: ret void9  %1 = alloca [2 x <4 x i32>], align 1610  ret void11}12 13; CHECK-LABEL: alloca_4d__vec_test14define void @alloca_4d__vec_test() {15  ; SCHECK:  alloca [2 x [2 x [2 x [2 x i32]]]], align 1616  ; FCHECK:  alloca [16 x i32], align 1617  ; CHECK: ret void18  %1 = alloca [2 x [2 x [2 x <2 x i32>]]], align 1619  ret void20}21 22; CHECK-LABEL: alloca_vec_test23define void @alloca_vec_test() {24  ; CHECK:  alloca [4 x i32], align 1625  ; CHECK: ret void26  %1 = alloca <4 x i32>, align 1627  ret void28}29 30; CHECK-LABEL: alloca_2d_gep_test31define void @alloca_2d_gep_test() {32  ; SCHECK:  [[alloca_val:%.*]] = alloca [2 x [2 x i32]], align 1633  ; FCHECK:  [[alloca_val:%.*]] = alloca [4 x i32], align 1634  ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0)35  ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw [2 x [2 x i32]], ptr [[alloca_val]], i32 0, i32 [[tid]]36  ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 237  ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_mul]]38  ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]]39  ; CHECK: ret void40  %1 = alloca [2 x <2 x i32>], align 1641  %2 = tail call i32 @llvm.dx.thread.id(i32 0)42  %3 = getelementptr inbounds nuw [2 x <2 x i32>], ptr %1, i32 0, i32 %243  ret void44}45 46; CHECK-LABEL: subtype_array_test47define void @subtype_array_test() {48  ; SCHECK:  [[alloca_val:%.*]] = alloca [8 x [4 x i32]], align 449  ; FCHECK:  [[alloca_val:%.*]] = alloca [32 x i32], align 450  ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0)51  ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[alloca_val]], i32 [[tid]]52  ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 453  ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_mul]]54  ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [32 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]]55  ; CHECK: ret void56  %arr = alloca [8 x [4 x i32]], align 457  %i = tail call i32 @llvm.dx.thread.id(i32 0)58  %gep = getelementptr inbounds nuw [4 x i32], ptr %arr, i32 %i59  ret void60}61 62; CHECK-LABEL: subtype_vector_test63define void @subtype_vector_test() {64  ; SCHECK:  [[alloca_val:%.*]] = alloca [8 x [4 x i32]], align 465  ; FCHECK:  [[alloca_val:%.*]] = alloca [32 x i32], align 466  ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0)67  ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[alloca_val]], i32 [[tid]]68  ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 469  ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_mul]]70  ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [32 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]]71  ; CHECK: ret void72  %arr = alloca [8 x <4 x i32>], align 473  %i = tail call i32 @llvm.dx.thread.id(i32 0)74  %gep = getelementptr inbounds nuw <4 x i32>, ptr %arr, i32 %i75  ret void76}77 78; CHECK-LABEL: subtype_scalar_test79define void @subtype_scalar_test() {80  ; SCHECK:  [[alloca_val:%.*]] = alloca [8 x [4 x i32]], align 481  ; FCHECK:  [[alloca_val:%.*]] = alloca [32 x i32], align 482  ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0)83  ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw i32, ptr [[alloca_val]], i32 [[tid]]84  ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 185  ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_mul]]86  ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [32 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]]87  ; CHECK: ret void88  %arr = alloca [8 x [4 x i32]], align 489  %i = tail call i32 @llvm.dx.thread.id(i32 0)90  %gep = getelementptr inbounds nuw i32, ptr %arr, i32 %i91  ret void92}93 94; CHECK-LABEL: subtype_i8_test95define void @subtype_i8_test() {96  ; SCHECK:  [[alloca_val:%.*]] = alloca [8 x [4 x i32]], align 497  ; FCHECK:  [[alloca_val:%.*]] = alloca [32 x i32], align 498  ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0)99  ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw i8, ptr [[alloca_val]], i32 [[tid]]100  ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 1101  ; FCHECK: [[flatidx_lshr:%.*]] = lshr i32 [[flatidx_mul]], 2102  ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_lshr]]103  ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [32 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]]104  ; CHECK: ret void105  %arr = alloca [8 x [4 x i32]], align 4106  %i = tail call i32 @llvm.dx.thread.id(i32 0)107  %gep = getelementptr inbounds nuw i8, ptr %arr, i32 %i108  ret void109}110