100 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -dxil-legalize -dxil-finalize-linkage -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s3 4define void @replace_float_memset_test() #0 {5; CHECK-LABEL: define void @replace_float_memset_test(6; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT: [[ACCUM_I_FLAT:%.*]] = alloca [2 x float], align 48; CHECK-NEXT: [[GEP:%.*]] = getelementptr [2 x float], ptr [[ACCUM_I_FLAT]], i32 0, i32 09; CHECK-NEXT: store float 0.000000e+00, ptr [[GEP]], align 410; CHECK-NEXT: [[GEP1:%.*]] = getelementptr [2 x float], ptr [[ACCUM_I_FLAT]], i32 0, i32 111; CHECK-NEXT: store float 0.000000e+00, ptr [[GEP1]], align 412; CHECK-NEXT: ret void13;14 %accum.i.flat = alloca [2 x float], align 415 call void @llvm.memset.p0.i32(ptr nonnull align 4 dereferenceable(8) %accum.i.flat, i8 0, i32 8, i1 false)16 ret void17}18 19define void @replace_half_memset_test() #0 {20; CHECK-LABEL: define void @replace_half_memset_test(21; CHECK-SAME: ) #[[ATTR0]] {22; CHECK-NEXT: [[ACCUM_I_FLAT:%.*]] = alloca [2 x half], align 423; CHECK-NEXT: [[GEP:%.*]] = getelementptr [2 x half], ptr [[ACCUM_I_FLAT]], i32 0, i32 024; CHECK-NEXT: store half 0xH0000, ptr [[GEP]], align 225; CHECK-NEXT: [[GEP1:%.*]] = getelementptr [2 x half], ptr [[ACCUM_I_FLAT]], i32 0, i32 126; CHECK-NEXT: store half 0xH0000, ptr [[GEP1]], align 227; CHECK-NEXT: ret void28;29 %accum.i.flat = alloca [2 x half], align 430 call void @llvm.memset.p0.i32(ptr nonnull align 4 dereferenceable(8) %accum.i.flat, i8 0, i32 4, i1 false)31 ret void32}33 34define void @replace_double_memset_test() #0 {35; CHECK-LABEL: define void @replace_double_memset_test(36; CHECK-SAME: ) #[[ATTR0]] {37; CHECK-NEXT: [[ACCUM_I_FLAT:%.*]] = alloca [2 x double], align 438; CHECK-NEXT: [[GEP:%.*]] = getelementptr [2 x double], ptr [[ACCUM_I_FLAT]], i32 0, i32 039; CHECK-NEXT: store double 0.000000e+00, ptr [[GEP]], align 840; CHECK-NEXT: [[GEP1:%.*]] = getelementptr [2 x double], ptr [[ACCUM_I_FLAT]], i32 0, i32 141; CHECK-NEXT: store double 0.000000e+00, ptr [[GEP1]], align 842; CHECK-NEXT: ret void43;44 %accum.i.flat = alloca [2 x double], align 445 call void @llvm.memset.p0.i32(ptr nonnull align 4 dereferenceable(8) %accum.i.flat, i8 0, i32 16, i1 false)46 ret void47}48 49define void @replace_int16_memset_test() #0 {50; CHECK-LABEL: define void @replace_int16_memset_test(51; CHECK-SAME: ) #[[ATTR0]] {52; CHECK-NEXT: [[CACHE_I:%.*]] = alloca [2 x i16], align 253; CHECK-NEXT: [[GEP:%.*]] = getelementptr [2 x i16], ptr [[CACHE_I]], i32 0, i32 054; CHECK-NEXT: store i16 0, ptr [[GEP]], align 255; CHECK-NEXT: [[GEP1:%.*]] = getelementptr [2 x i16], ptr [[CACHE_I]], i32 0, i32 156; CHECK-NEXT: store i16 0, ptr [[GEP1]], align 257; CHECK-NEXT: ret void58;59 %cache.i = alloca [2 x i16], align 260 call void @llvm.memset.p0.i32(ptr nonnull align 2 dereferenceable(4) %cache.i, i8 0, i32 4, i1 false)61 ret void62}63 64define void @replace_int_memset_test() #0 {65; CHECK-LABEL: define void @replace_int_memset_test(66; CHECK-SAME: ) #[[ATTR0]] {67; CHECK-NEXT: [[ACCUM_I_FLAT:%.*]] = alloca [1 x i32], align 468; CHECK-NEXT: [[GEP:%.*]] = getelementptr [1 x i32], ptr [[ACCUM_I_FLAT]], i32 0, i32 069; CHECK-NEXT: store i32 0, ptr [[GEP]], align 470; CHECK-NEXT: ret void71;72 %accum.i.flat = alloca [1 x i32], align 473 call void @llvm.memset.p0.i32(ptr nonnull align 4 dereferenceable(8) %accum.i.flat, i8 0, i32 4, i1 false)74 ret void75}76 77define void @replace_int_memset_to_var_test() #0 {78; CHECK-LABEL: define void @replace_int_memset_to_var_test(79; CHECK-SAME: ) #[[ATTR0]] {80; CHECK-NEXT: [[ACCUM_I_FLAT:%.*]] = alloca [1 x i32], align 481; CHECK-NEXT: [[I:%.*]] = alloca i32, align 482; CHECK-NEXT: store i32 1, ptr [[I]], align 483; CHECK-NEXT: [[I8_LOAD:%.*]] = load i32, ptr [[I]], align 484; CHECK-NEXT: [[GEP:%.*]] = getelementptr [1 x i32], ptr [[ACCUM_I_FLAT]], i32 0, i32 085; CHECK-NEXT: store i32 [[I8_LOAD]], ptr [[GEP]], align 486; CHECK-NEXT: ret void87;88 %accum.i.flat = alloca [1 x i32], align 489 %i = alloca i8, align 490 store i8 1, ptr %i91 %i8.load = load i8, ptr %i92 call void @llvm.memset.p0.i32(ptr nonnull align 4 dereferenceable(8) %accum.i.flat, i8 %i8.load, i32 4, i1 false)93 ret void94}95 96attributes #0 = {"hlsl.export"}97 98 99declare void @llvm.memset.p0.i32(ptr writeonly captures(none), i8, i32, i1 immarg)100