brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 55bdefc Raw
155 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_int_memcpy_test() #0 {5; CHECK-LABEL: define void @replace_int_memcpy_test(6; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT:    [[TMP1:%.*]] = alloca [1 x i32], align 48; CHECK-NEXT:    [[TMP2:%.*]] = alloca [1 x i32], align 49; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [1 x i32], ptr [[TMP1]], i32 0, i32 010; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[GEP]], align 411; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [1 x i32], ptr [[TMP2]], i32 0, i32 012; CHECK-NEXT:    store i32 [[TMP3]], ptr [[GEP1]], align 413; CHECK-NEXT:    ret void14;15  %1 = alloca [1 x i32], align 416  %2 = alloca [1 x i32], align 417  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 4 dereferenceable(4) %2, ptr align 4 dereferenceable(4) %1, i32 4, i1 false)18  ret void19}20 21define void @replace_3int_memcpy_test() #0 {22; CHECK-LABEL: define void @replace_3int_memcpy_test(23; CHECK-SAME: ) #[[ATTR0]] {24; CHECK-NEXT:    [[TMP1:%.*]] = alloca [3 x i32], align 425; CHECK-NEXT:    [[TMP2:%.*]] = alloca [3 x i32], align 426; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP1]], i32 0, i32 027; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[GEP]], align 428; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP2]], i32 0, i32 029; CHECK-NEXT:    store i32 [[TMP3]], ptr [[GEP1]], align 430; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP1]], i32 0, i32 131; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[GEP2]], align 432; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP2]], i32 0, i32 133; CHECK-NEXT:    store i32 [[TMP4]], ptr [[GEP3]], align 434; CHECK-NEXT:    [[GEP4:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP1]], i32 0, i32 235; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[GEP4]], align 436; CHECK-NEXT:    [[GEP5:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP2]], i32 0, i32 237; CHECK-NEXT:    store i32 [[TMP5]], ptr [[GEP5]], align 438; CHECK-NEXT:    ret void39;40  %1 = alloca [3 x i32], align 441  %2 = alloca [3 x i32], align 442  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 4 dereferenceable(12) %2, ptr align 4 dereferenceable(12) %1, i32 12, i1 false)43  ret void44}45 46define void @replace_mismatched_size_int_memcpy_test() #0 {47; CHECK-LABEL: define void @replace_mismatched_size_int_memcpy_test(48; CHECK-SAME: ) #[[ATTR0]] {49; CHECK-NEXT:    [[TMP1:%.*]] = alloca [2 x i32], align 450; CHECK-NEXT:    [[TMP2:%.*]] = alloca [3 x i32], align 451; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[TMP1]], i32 0, i32 052; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[GEP]], align 453; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP2]], i32 0, i32 054; CHECK-NEXT:    store i32 [[TMP3]], ptr [[GEP1]], align 455; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [2 x i32], ptr [[TMP1]], i32 0, i32 156; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[GEP2]], align 457; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds [3 x i32], ptr [[TMP2]], i32 0, i32 158; CHECK-NEXT:    store i32 [[TMP4]], ptr [[GEP3]], align 459; CHECK-NEXT:    ret void60;61  %1 = alloca [2 x i32], align 462  %2 = alloca [3 x i32], align 463  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 4 dereferenceable(12) %2, ptr align 4 dereferenceable(8) %1, i32 8, i1 false)64  ret void65}66 67define void @replace_int16_memcpy_test() #0 {68; CHECK-LABEL: define void @replace_int16_memcpy_test(69; CHECK-SAME: ) #[[ATTR0]] {70; CHECK-NEXT:    [[TMP1:%.*]] = alloca [2 x i16], align 271; CHECK-NEXT:    [[TMP2:%.*]] = alloca [2 x i16], align 272; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x i16], ptr [[TMP1]], i32 0, i32 073; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr [[GEP]], align 274; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [2 x i16], ptr [[TMP2]], i32 0, i32 075; CHECK-NEXT:    store i16 [[TMP3]], ptr [[GEP1]], align 276; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [2 x i16], ptr [[TMP1]], i32 0, i32 177; CHECK-NEXT:    [[TMP4:%.*]] = load i16, ptr [[GEP2]], align 278; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds [2 x i16], ptr [[TMP2]], i32 0, i32 179; CHECK-NEXT:    store i16 [[TMP4]], ptr [[GEP3]], align 280; CHECK-NEXT:    ret void81;82  %1 = alloca [2 x i16], align 283  %2 = alloca [2 x i16], align 284  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 2 dereferenceable(4) %2, ptr align 2 dereferenceable(4) %1, i32 4, i1 false)85  ret void86}87 88define void @replace_float_memcpy_test() #0 {89; CHECK-LABEL: define void @replace_float_memcpy_test(90; CHECK-SAME: ) #[[ATTR0]] {91; CHECK-NEXT:    [[TMP1:%.*]] = alloca [2 x float], align 492; CHECK-NEXT:    [[TMP2:%.*]] = alloca [2 x float], align 493; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x float], ptr [[TMP1]], i32 0, i32 094; CHECK-NEXT:    [[TMP3:%.*]] = load float, ptr [[GEP]], align 495; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [2 x float], ptr [[TMP2]], i32 0, i32 096; CHECK-NEXT:    store float [[TMP3]], ptr [[GEP1]], align 497; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [2 x float], ptr [[TMP1]], i32 0, i32 198; CHECK-NEXT:    [[TMP4:%.*]] = load float, ptr [[GEP2]], align 499; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds [2 x float], ptr [[TMP2]], i32 0, i32 1100; CHECK-NEXT:    store float [[TMP4]], ptr [[GEP3]], align 4101; CHECK-NEXT:    ret void102;103  %1 = alloca [2 x float], align 4104  %2 = alloca [2 x float], align 4105  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 4 dereferenceable(8) %2, ptr align 4 dereferenceable(8) %1, i32 8, i1 false)106  ret void107}108 109define void @replace_double_memcpy_test() #0 {110; CHECK-LABEL: define void @replace_double_memcpy_test(111; CHECK-SAME: ) #[[ATTR0]] {112; CHECK-NEXT:    [[TMP1:%.*]] = alloca [2 x double], align 4113; CHECK-NEXT:    [[TMP2:%.*]] = alloca [2 x double], align 4114; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x double], ptr [[TMP1]], i32 0, i32 0115; CHECK-NEXT:    [[TMP3:%.*]] = load double, ptr [[GEP]], align 8116; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [2 x double], ptr [[TMP2]], i32 0, i32 0117; CHECK-NEXT:    store double [[TMP3]], ptr [[GEP1]], align 8118; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [2 x double], ptr [[TMP1]], i32 0, i32 1119; CHECK-NEXT:    [[TMP4:%.*]] = load double, ptr [[GEP2]], align 8120; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds [2 x double], ptr [[TMP2]], i32 0, i32 1121; CHECK-NEXT:    store double [[TMP4]], ptr [[GEP3]], align 8122; CHECK-NEXT:    ret void123;124  %1 = alloca [2 x double], align 4125  %2 = alloca [2 x double], align 4126  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 4 dereferenceable(8) %2, ptr align 4 dereferenceable(8) %1, i32 16, i1 false)127  ret void128}129 130define void @replace_half_memcpy_test() #0 {131; CHECK-LABEL: define void @replace_half_memcpy_test(132; CHECK-SAME: ) #[[ATTR0]] {133; CHECK-NEXT:    [[TMP1:%.*]] = alloca [2 x half], align 2134; CHECK-NEXT:    [[TMP2:%.*]] = alloca [2 x half], align 2135; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [2 x half], ptr [[TMP1]], i32 0, i32 0136; CHECK-NEXT:    [[TMP3:%.*]] = load half, ptr [[GEP]], align 2137; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [2 x half], ptr [[TMP2]], i32 0, i32 0138; CHECK-NEXT:    store half [[TMP3]], ptr [[GEP1]], align 2139; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [2 x half], ptr [[TMP1]], i32 0, i32 1140; CHECK-NEXT:    [[TMP4:%.*]] = load half, ptr [[GEP2]], align 2141; CHECK-NEXT:    [[GEP3:%.*]] = getelementptr inbounds [2 x half], ptr [[TMP2]], i32 0, i32 1142; CHECK-NEXT:    store half [[TMP4]], ptr [[GEP3]], align 2143; CHECK-NEXT:    ret void144;145  %1 = alloca [2 x half], align 2146  %2 = alloca [2 x half], align 2147  call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 2 dereferenceable(4) %2, ptr align 2 dereferenceable(4) %1, i32 4, i1 false)148  ret void149}150 151attributes #0 = {"hlsl.export"}152 153declare void @llvm.memcpy.p0.p2.i32(ptr noalias, ptr addrspace(2) noalias readonly, i32, i1)154declare void @llvm.memcpy.p0.p0.i32(ptr noalias, ptr noalias readonly, i32, i1)155