; RUN: opt -S -passes='dxil-data-scalarization' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=SCHECK,CHECK ; RUN: opt -S -passes='dxil-data-scalarization,dxil-flatten-arrays' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s --check-prefixes=FCHECK,CHECK ; CHECK-LABEL: alloca_2d__vec_test define void @alloca_2d__vec_test() { ; SCHECK: alloca [2 x [4 x i32]], align 16 ; FCHECK: alloca [8 x i32], align 16 ; CHECK: ret void %1 = alloca [2 x <4 x i32>], align 16 ret void } ; CHECK-LABEL: alloca_4d__vec_test define void @alloca_4d__vec_test() { ; SCHECK: alloca [2 x [2 x [2 x [2 x i32]]]], align 16 ; FCHECK: alloca [16 x i32], align 16 ; CHECK: ret void %1 = alloca [2 x [2 x [2 x <2 x i32>]]], align 16 ret void } ; CHECK-LABEL: alloca_vec_test define void @alloca_vec_test() { ; CHECK: alloca [4 x i32], align 16 ; CHECK: ret void %1 = alloca <4 x i32>, align 16 ret void } ; CHECK-LABEL: alloca_2d_gep_test define void @alloca_2d_gep_test() { ; SCHECK: [[alloca_val:%.*]] = alloca [2 x [2 x i32]], align 16 ; FCHECK: [[alloca_val:%.*]] = alloca [4 x i32], align 16 ; CHECK: [[tid:%.*]] = tail call i32 @llvm.dx.thread.id(i32 0) ; SCHECK: [[gep:%.*]] = getelementptr inbounds nuw [2 x [2 x i32]], ptr [[alloca_val]], i32 0, i32 [[tid]] ; FCHECK: [[flatidx_mul:%.*]] = mul i32 [[tid]], 2 ; FCHECK: [[flatidx:%.*]] = add i32 0, [[flatidx_mul]] ; FCHECK: [[gep:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[alloca_val]], i32 0, i32 [[flatidx]] ; CHECK: ret void %1 = alloca [2 x <2 x i32>], align 16 %2 = tail call i32 @llvm.dx.thread.id(i32 0) %3 = getelementptr inbounds nuw [2 x <2 x i32>], ptr %1, i32 0, i32 %2 ret void }