brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · a6c5273 Raw
268 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v \3; RUN: -riscv-v-vector-bits-min=-1 -riscv-v-slp-max-vf=0 -S | FileCheck %s --check-prefixes=CHECK4; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v -S | FileCheck %s --check-prefixes=DEFAULT5 6 7define void @simple_copy(ptr %dest, ptr %p) {8; CHECK-LABEL: @simple_copy(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 411; CHECK-NEXT:    store <2 x i16> [[TMP0]], ptr [[DEST:%.*]], align 412; CHECK-NEXT:    ret void13;14; DEFAULT-LABEL: @simple_copy(15; DEFAULT-NEXT:  entry:16; DEFAULT-NEXT:    [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 417; DEFAULT-NEXT:    store <2 x i16> [[TMP0]], ptr [[DEST:%.*]], align 418; DEFAULT-NEXT:    ret void19;20entry:21  %e0 = load i16, ptr %p, align 422  %inc = getelementptr inbounds i16, ptr %p, i64 123  %e1 = load i16, ptr %inc, align 224 25  store i16 %e0, ptr %dest, align 426  %inc2 = getelementptr inbounds i16, ptr %dest, i64 127  store i16 %e1, ptr %inc2, align 228  ret void29}30 31define void @vec_add(ptr %dest, ptr %p) {32; CHECK-LABEL: @vec_add(33; CHECK-NEXT:  entry:34; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 435; CHECK-NEXT:    [[TMP1:%.*]] = add <2 x i16> [[TMP0]], splat (i16 1)36; CHECK-NEXT:    store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 437; CHECK-NEXT:    ret void38;39; DEFAULT-LABEL: @vec_add(40; DEFAULT-NEXT:  entry:41; DEFAULT-NEXT:    [[TMP0:%.*]] = load <2 x i16>, ptr [[P:%.*]], align 442; DEFAULT-NEXT:    [[TMP1:%.*]] = add <2 x i16> [[TMP0]], splat (i16 1)43; DEFAULT-NEXT:    store <2 x i16> [[TMP1]], ptr [[DEST:%.*]], align 444; DEFAULT-NEXT:    ret void45;46entry:47  %e0 = load i16, ptr %p, align 448  %inc = getelementptr inbounds i16, ptr %p, i64 149  %e1 = load i16, ptr %inc, align 250 51  %a0 = add i16 %e0, 152  %a1 = add i16 %e1, 153 54  store i16 %a0, ptr %dest, align 455  %inc2 = getelementptr inbounds i16, ptr %dest, i64 156  store i16 %a1, ptr %inc2, align 257  ret void58}59 60 61define void @splat_store_i16(ptr %dest, ptr %p) {62; CHECK-LABEL: @splat_store_i16(63; CHECK-NEXT:  entry:64; CHECK-NEXT:    [[E0:%.*]] = load i16, ptr [[P:%.*]], align 465; CHECK-NEXT:    store i16 [[E0]], ptr [[DEST:%.*]], align 466; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i16, ptr [[DEST]], i64 167; CHECK-NEXT:    store i16 [[E0]], ptr [[INC2]], align 268; CHECK-NEXT:    ret void69;70; DEFAULT-LABEL: @splat_store_i16(71; DEFAULT-NEXT:  entry:72; DEFAULT-NEXT:    [[E0:%.*]] = load i16, ptr [[P:%.*]], align 473; DEFAULT-NEXT:    store i16 [[E0]], ptr [[DEST:%.*]], align 474; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i16, ptr [[DEST]], i64 175; DEFAULT-NEXT:    store i16 [[E0]], ptr [[INC2]], align 276; DEFAULT-NEXT:    ret void77;78entry:79  %e0 = load i16, ptr %p, align 480 81  store i16 %e0, ptr %dest, align 482  %inc2 = getelementptr inbounds i16, ptr %dest, i64 183  store i16 %e0, ptr %inc2, align 284  ret void85}86 87define void @splat_store_i64(ptr %dest, ptr %p) {88; CHECK-LABEL: @splat_store_i64(89; CHECK-NEXT:  entry:90; CHECK-NEXT:    [[E0:%.*]] = load i64, ptr [[P:%.*]], align 491; CHECK-NEXT:    store i64 [[E0]], ptr [[DEST:%.*]], align 492; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 193; CHECK-NEXT:    store i64 [[E0]], ptr [[INC2]], align 294; CHECK-NEXT:    ret void95;96; DEFAULT-LABEL: @splat_store_i64(97; DEFAULT-NEXT:  entry:98; DEFAULT-NEXT:    [[E0:%.*]] = load i64, ptr [[P:%.*]], align 499; DEFAULT-NEXT:    store i64 [[E0]], ptr [[DEST:%.*]], align 4100; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1101; DEFAULT-NEXT:    store i64 [[E0]], ptr [[INC2]], align 2102; DEFAULT-NEXT:    ret void103;104entry:105  %e0 = load i64, ptr %p, align 4106 107  store i64 %e0, ptr %dest, align 4108  %inc2 = getelementptr inbounds i64, ptr %dest, i64 1109  store i64 %e0, ptr %inc2, align 2110  ret void111}112 113define void @splat_store_i64_zero(ptr %dest) {114; CHECK-LABEL: @splat_store_i64_zero(115; CHECK-NEXT:  entry:116; CHECK-NEXT:    store i64 0, ptr [[DEST:%.*]], align 4117; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1118; CHECK-NEXT:    store i64 0, ptr [[INC2]], align 2119; CHECK-NEXT:    ret void120;121; DEFAULT-LABEL: @splat_store_i64_zero(122; DEFAULT-NEXT:  entry:123; DEFAULT-NEXT:    store i64 0, ptr [[DEST:%.*]], align 4124; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1125; DEFAULT-NEXT:    store i64 0, ptr [[INC2]], align 2126; DEFAULT-NEXT:    ret void127;128entry:129  store i64 0, ptr %dest, align 4130  %inc2 = getelementptr inbounds i64, ptr %dest, i64 1131  store i64 0, ptr %inc2, align 2132  ret void133}134 135define void @splat_store_i64_one(ptr %dest) {136; CHECK-LABEL: @splat_store_i64_one(137; CHECK-NEXT:  entry:138; CHECK-NEXT:    store i64 1, ptr [[DEST:%.*]], align 4139; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1140; CHECK-NEXT:    store i64 1, ptr [[INC2]], align 2141; CHECK-NEXT:    ret void142;143; DEFAULT-LABEL: @splat_store_i64_one(144; DEFAULT-NEXT:  entry:145; DEFAULT-NEXT:    store i64 1, ptr [[DEST:%.*]], align 4146; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i64, ptr [[DEST]], i64 1147; DEFAULT-NEXT:    store i64 1, ptr [[INC2]], align 2148; DEFAULT-NEXT:    ret void149;150entry:151  store i64 1, ptr %dest, align 4152  %inc2 = getelementptr inbounds i64, ptr %dest, i64 1153  store i64 1, ptr %inc2, align 2154  ret void155}156 157define void @splat_store_i32_zero(ptr %dest) {158; CHECK-LABEL: @splat_store_i32_zero(159; CHECK-NEXT:  entry:160; CHECK-NEXT:    store <4 x i32> zeroinitializer, ptr [[DEST:%.*]], align 4161; CHECK-NEXT:    ret void162;163; DEFAULT-LABEL: @splat_store_i32_zero(164; DEFAULT-NEXT:  entry:165; DEFAULT-NEXT:    store <4 x i32> zeroinitializer, ptr [[DEST:%.*]], align 4166; DEFAULT-NEXT:    ret void167;168entry:169  store i32 0, ptr %dest, align 4170  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1171  store i32 0, ptr %inc1, align 2172  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2173  store i32 0, ptr %inc2, align 2174  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3175  store i32 0, ptr %inc3, align 2176  ret void177}178 179define void @splat_store_i32_one(ptr %dest) {180; CHECK-LABEL: @splat_store_i32_one(181; CHECK-NEXT:  entry:182; CHECK-NEXT:    store <4 x i32> splat (i32 1), ptr [[DEST:%.*]], align 4183; CHECK-NEXT:    ret void184;185; DEFAULT-LABEL: @splat_store_i32_one(186; DEFAULT-NEXT:  entry:187; DEFAULT-NEXT:    store <4 x i32> splat (i32 1), ptr [[DEST:%.*]], align 4188; DEFAULT-NEXT:    ret void189;190entry:191  store i32 1, ptr %dest, align 4192  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1193  store i32 1, ptr %inc1, align 2194  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2195  store i32 1, ptr %inc2, align 2196  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3197  store i32 1, ptr %inc3, align 2198  ret void199}200 201define void @store_stepvector_i32(ptr %dest) {202; CHECK-LABEL: @store_stepvector_i32(203; CHECK-NEXT:  entry:204; CHECK-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4205; CHECK-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1206; CHECK-NEXT:    store i32 1, ptr [[INC1]], align 2207; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2208; CHECK-NEXT:    store i32 2, ptr [[INC2]], align 2209; CHECK-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3210; CHECK-NEXT:    store i32 3, ptr [[INC3]], align 2211; CHECK-NEXT:    ret void212;213; DEFAULT-LABEL: @store_stepvector_i32(214; DEFAULT-NEXT:  entry:215; DEFAULT-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4216; DEFAULT-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1217; DEFAULT-NEXT:    store i32 1, ptr [[INC1]], align 2218; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2219; DEFAULT-NEXT:    store i32 2, ptr [[INC2]], align 2220; DEFAULT-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3221; DEFAULT-NEXT:    store i32 3, ptr [[INC3]], align 2222; DEFAULT-NEXT:    ret void223;224entry:225  store i32 0, ptr %dest, align 4226  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1227  store i32 1, ptr %inc1, align 2228  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2229  store i32 2, ptr %inc2, align 2230  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3231  store i32 3, ptr %inc3, align 2232  ret void233}234 235define void @store_arbitrary_constant_i32(ptr %dest) {236; CHECK-LABEL: @store_arbitrary_constant_i32(237; CHECK-NEXT:  entry:238; CHECK-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4239; CHECK-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1240; CHECK-NEXT:    store i32 -33, ptr [[INC1]], align 2241; CHECK-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2242; CHECK-NEXT:    store i32 44, ptr [[INC2]], align 2243; CHECK-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3244; CHECK-NEXT:    store i32 77, ptr [[INC3]], align 2245; CHECK-NEXT:    ret void246;247; DEFAULT-LABEL: @store_arbitrary_constant_i32(248; DEFAULT-NEXT:  entry:249; DEFAULT-NEXT:    store i32 0, ptr [[DEST:%.*]], align 4250; DEFAULT-NEXT:    [[INC1:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 1251; DEFAULT-NEXT:    store i32 -33, ptr [[INC1]], align 2252; DEFAULT-NEXT:    [[INC2:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 2253; DEFAULT-NEXT:    store i32 44, ptr [[INC2]], align 2254; DEFAULT-NEXT:    [[INC3:%.*]] = getelementptr inbounds i32, ptr [[DEST]], i64 3255; DEFAULT-NEXT:    store i32 77, ptr [[INC3]], align 2256; DEFAULT-NEXT:    ret void257;258entry:259  store i32 0, ptr %dest, align 4260  %inc1 = getelementptr inbounds i32, ptr %dest, i64 1261  store i32 -33, ptr %inc1, align 2262  %inc2 = getelementptr inbounds i32, ptr %dest, i64 2263  store i32 44, ptr %inc2, align 2264  %inc3 = getelementptr inbounds i32, ptr %dest, i64 3265  store i32 77, ptr %inc3, align 2266  ret void267}268