brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · 181ab26 Raw
320 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+v -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV32 %s3; RUN: llc -mtriple=riscv64 -mattr=+d,+v -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV64 %s4 5define void @combine_zero_stores_2xi8(ptr %p) {6; CHECK-LABEL: combine_zero_stores_2xi8:7; CHECK:       # %bb.0:8; CHECK-NEXT:    sh zero, 0(a0)9; CHECK-NEXT:    ret10  store i8 zeroinitializer, ptr %p, align 211  %gep = getelementptr i8, ptr %p, i64 112  store i8 zeroinitializer, ptr %gep13  ret void14}15 16define void @combine_zero_stores_4xi8(ptr %p) {17; CHECK-LABEL: combine_zero_stores_4xi8:18; CHECK:       # %bb.0:19; CHECK-NEXT:    sw zero, 0(a0)20; CHECK-NEXT:    ret21  store i8 zeroinitializer, ptr %p, align 422  %gep1 = getelementptr i8, ptr %p, i64 123  store i8 zeroinitializer, ptr %gep124  %gep2 = getelementptr i8, ptr %p, i64 225  store i8 zeroinitializer, ptr %gep226  %gep3 = getelementptr i8, ptr %p, i64 327  store i8 zeroinitializer, ptr %gep328  ret void29}30 31define void @combine_zero_stores_8xi8(ptr %p) {32; RV32-LABEL: combine_zero_stores_8xi8:33; RV32:       # %bb.0:34; RV32-NEXT:    sw zero, 0(a0)35; RV32-NEXT:    sw zero, 4(a0)36; RV32-NEXT:    ret37;38; RV64-LABEL: combine_zero_stores_8xi8:39; RV64:       # %bb.0:40; RV64-NEXT:    sd zero, 0(a0)41; RV64-NEXT:    ret42  store i8 zeroinitializer, ptr %p, align 843  %gep1 = getelementptr i8, ptr %p, i64 144  store i8 zeroinitializer, ptr %gep145  %gep2 = getelementptr i8, ptr %p, i64 246  store i8 zeroinitializer, ptr %gep247  %gep3 = getelementptr i8, ptr %p, i64 348  store i8 zeroinitializer, ptr %gep349  %gep4 = getelementptr i8, ptr %p, i64 450  store i8 zeroinitializer, ptr %gep4, align 851  %gep5 = getelementptr i8, ptr %p, i64 552  store i8 zeroinitializer, ptr %gep553  %gep6 = getelementptr i8, ptr %p, i64 654  store i8 zeroinitializer, ptr %gep655  %gep7 = getelementptr i8, ptr %p, i64 756  store i8 zeroinitializer, ptr %gep757  ret void58}59 60define void @combine_zero_stores_2xi16(ptr %p) {61; CHECK-LABEL: combine_zero_stores_2xi16:62; CHECK:       # %bb.0:63; CHECK-NEXT:    sw zero, 0(a0)64; CHECK-NEXT:    ret65  store i16 zeroinitializer, ptr %p, align 466  %gep = getelementptr i8, ptr %p, i64 267  store i16 zeroinitializer, ptr %gep68  ret void69}70 71define void @combine_zero_stores_4xi16(ptr %p) {72; RV32-LABEL: combine_zero_stores_4xi16:73; RV32:       # %bb.0:74; RV32-NEXT:    sw zero, 0(a0)75; RV32-NEXT:    sw zero, 4(a0)76; RV32-NEXT:    ret77;78; RV64-LABEL: combine_zero_stores_4xi16:79; RV64:       # %bb.0:80; RV64-NEXT:    sd zero, 0(a0)81; RV64-NEXT:    ret82  store i16 zeroinitializer, ptr %p, align 883  %gep1 = getelementptr i16, ptr %p, i64 184  store i16 zeroinitializer, ptr %gep185  %gep2 = getelementptr i16, ptr %p, i64 286  store i16 zeroinitializer, ptr %gep2, align 487  %gep3 = getelementptr i16, ptr %p, i64 388  store i16 zeroinitializer, ptr %gep389  ret void90}91 92define void @combine_zero_stores_8xi16(ptr %p) {93; RV32-LABEL: combine_zero_stores_8xi16:94; RV32:       # %bb.0:95; RV32-NEXT:    sw zero, 0(a0)96; RV32-NEXT:    sh zero, 4(a0)97; RV32-NEXT:    sh zero, 6(a0)98; RV32-NEXT:    sw zero, 8(a0)99; RV32-NEXT:    sh zero, 12(a0)100; RV32-NEXT:    sh zero, 14(a0)101; RV32-NEXT:    ret102;103; RV64-LABEL: combine_zero_stores_8xi16:104; RV64:       # %bb.0:105; RV64-NEXT:    sd zero, 0(a0)106; RV64-NEXT:    sd zero, 8(a0)107; RV64-NEXT:    ret108  store i16 zeroinitializer, ptr %p, align 16109  %gep1 = getelementptr i16, ptr %p, i64 1110  store i16 zeroinitializer, ptr %gep1111  %gep2 = getelementptr i16, ptr %p, i64 2112  store i16 zeroinitializer, ptr %gep2113  %gep3 = getelementptr i16, ptr %p, i64 3114  store i16 zeroinitializer, ptr %gep3115  %gep4 = getelementptr i16, ptr %p, i64 4116  store i16 zeroinitializer, ptr %gep4, align 8117  %gep5 = getelementptr i16, ptr %p, i64 5118  store i16 zeroinitializer, ptr %gep5119  %gep6 = getelementptr i16, ptr %p, i64 6120  store i16 zeroinitializer, ptr %gep6121  %gep7 = getelementptr i16, ptr %p, i64 7122  store i16 zeroinitializer, ptr %gep7123  ret void124}125 126define void @combine_zero_stores_2xi32(ptr %p) {127; RV32-LABEL: combine_zero_stores_2xi32:128; RV32:       # %bb.0:129; RV32-NEXT:    sw zero, 0(a0)130; RV32-NEXT:    sw zero, 4(a0)131; RV32-NEXT:    ret132;133; RV64-LABEL: combine_zero_stores_2xi32:134; RV64:       # %bb.0:135; RV64-NEXT:    sd zero, 0(a0)136; RV64-NEXT:    ret137  store i32 zeroinitializer, ptr %p, align 8138  %gep = getelementptr i8, ptr %p, i64 4139  store i32 zeroinitializer, ptr %gep140  ret void141}142 143define void @combine_zero_stores_4xi32(ptr %p) {144; RV32-LABEL: combine_zero_stores_4xi32:145; RV32:       # %bb.0:146; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma147; RV32-NEXT:    vmv.v.i v8, 0148; RV32-NEXT:    vse32.v v8, (a0)149; RV32-NEXT:    ret150;151; RV64-LABEL: combine_zero_stores_4xi32:152; RV64:       # %bb.0:153; RV64-NEXT:    sd zero, 0(a0)154; RV64-NEXT:    sd zero, 8(a0)155; RV64-NEXT:    ret156  store i32 zeroinitializer, ptr %p, align 16157  %gep1 = getelementptr i32, ptr %p, i64 1158  store i32 zeroinitializer, ptr %gep1159  %gep2 = getelementptr i32, ptr %p, i64 2160  store i32 zeroinitializer, ptr %gep2, align 8161  %gep3 = getelementptr i32, ptr %p, i64 3162  store i32 zeroinitializer, ptr %gep3163  ret void164}165 166define void @combine_zero_stores_8xi32(ptr %p) {167; RV32-LABEL: combine_zero_stores_8xi32:168; RV32:       # %bb.0:169; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma170; RV32-NEXT:    vmv.v.i v8, 0171; RV32-NEXT:    vse32.v v8, (a0)172; RV32-NEXT:    ret173;174; RV64-LABEL: combine_zero_stores_8xi32:175; RV64:       # %bb.0:176; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma177; RV64-NEXT:    vmv.v.i v8, 0178; RV64-NEXT:    vse64.v v8, (a0)179; RV64-NEXT:    ret180  store i32 zeroinitializer, ptr %p, align 32181  %gep1 = getelementptr i32, ptr %p, i64 1182  store i32 zeroinitializer, ptr %gep1183  %gep2 = getelementptr i32, ptr %p, i64 2184  store i32 zeroinitializer, ptr %gep2, align 8185  %gep3 = getelementptr i32, ptr %p, i64 3186  store i32 zeroinitializer, ptr %gep3187  %gep4 = getelementptr i32, ptr %p, i64 4188  store i32 zeroinitializer, ptr %gep4, align 8189  %gep5 = getelementptr i32, ptr %p, i64 5190  store i32 zeroinitializer, ptr %gep5191  %gep6 = getelementptr i32, ptr %p, i64 6192  store i32 zeroinitializer, ptr %gep6, align 8193  %gep7 = getelementptr i32, ptr %p, i64 7194  store i32 zeroinitializer, ptr %gep7195  ret void196}197 198define void @combine_zero_stores_2xi32_unaligned(ptr %p) {199; CHECK-LABEL: combine_zero_stores_2xi32_unaligned:200; CHECK:       # %bb.0:201; CHECK-NEXT:    sw zero, 0(a0)202; CHECK-NEXT:    sw zero, 4(a0)203; CHECK-NEXT:    ret204  store i32 zeroinitializer, ptr %p205  %gep = getelementptr i8, ptr %p, i64 4206  store i32 zeroinitializer, ptr %gep207  ret void208}209 210define void @combine_zero_stores_2xi64(ptr %p) {211; RV32-LABEL: combine_zero_stores_2xi64:212; RV32:       # %bb.0:213; RV32-NEXT:    sw zero, 0(a0)214; RV32-NEXT:    sw zero, 4(a0)215; RV32-NEXT:    sw zero, 8(a0)216; RV32-NEXT:    sw zero, 12(a0)217; RV32-NEXT:    ret218;219; RV64-LABEL: combine_zero_stores_2xi64:220; RV64:       # %bb.0:221; RV64-NEXT:    sd zero, 0(a0)222; RV64-NEXT:    sd zero, 8(a0)223; RV64-NEXT:    ret224  store i64 zeroinitializer, ptr %p225  %gep = getelementptr i8, ptr %p, i64 8226  store i64 zeroinitializer, ptr %gep227  ret void228}229 230define void @combine_fp_zero_stores_crash(ptr %ptr)  {231; CHECK-LABEL: combine_fp_zero_stores_crash:232; CHECK:       # %bb.0:233; CHECK-NEXT:    sw zero, 4(a0)234; CHECK-NEXT:    sw zero, 8(a0)235; CHECK-NEXT:    ret236  %addr1 = getelementptr float, ptr %ptr, i64 1237  %addr2 = getelementptr float, ptr %ptr, i64 2238  store float 0.000000e+00, ptr %addr1, align 4239  store float 0.000000e+00, ptr %addr2, align 4240  ret void241}242 243define void @combine_allones_stores_2xi8(ptr %p) {244; CHECK-LABEL: combine_allones_stores_2xi8:245; CHECK:       # %bb.0:246; CHECK-NEXT:    li a1, -1247; CHECK-NEXT:    sh a1, 0(a0)248; CHECK-NEXT:    ret249  store i8 -1, ptr %p, align 4250  %gep = getelementptr i8, ptr %p, i64 1251  store i8 -1, ptr %gep252  ret void253}254 255define void @combine_allones_stores_2xi16(ptr %p) {256; CHECK-LABEL: combine_allones_stores_2xi16:257; CHECK:       # %bb.0:258; CHECK-NEXT:    li a1, -1259; CHECK-NEXT:    sw a1, 0(a0)260; CHECK-NEXT:    ret261  store i16 -1, ptr %p, align 4262  %gep = getelementptr i8, ptr %p, i64 2263  store i16 -1, ptr %gep264  ret void265}266 267define void @combine_allones_stores_2xi32(ptr %p) {268; RV32-LABEL: combine_allones_stores_2xi32:269; RV32:       # %bb.0:270; RV32-NEXT:    li a1, -1271; RV32-NEXT:    sw a1, 0(a0)272; RV32-NEXT:    sw a1, 4(a0)273; RV32-NEXT:    ret274;275; RV64-LABEL: combine_allones_stores_2xi32:276; RV64:       # %bb.0:277; RV64-NEXT:    li a1, -1278; RV64-NEXT:    sd a1, 0(a0)279; RV64-NEXT:    ret280  store i32 -1, ptr %p, align 8281  %gep = getelementptr i8, ptr %p, i64 4282  store i32 -1, ptr %gep283  ret void284}285 286define void @combine_allones_stores_2xi32_unaligned(ptr %p) {287; CHECK-LABEL: combine_allones_stores_2xi32_unaligned:288; CHECK:       # %bb.0:289; CHECK-NEXT:    li a1, -1290; CHECK-NEXT:    sw a1, 0(a0)291; CHECK-NEXT:    sw a1, 4(a0)292; CHECK-NEXT:    ret293  store i32 -1, ptr %p294  %gep = getelementptr i8, ptr %p, i64 4295  store i32 -1, ptr %gep296  ret void297}298 299define void @combine_allones_stores_2xi64(ptr %p) {300; RV32-LABEL: combine_allones_stores_2xi64:301; RV32:       # %bb.0:302; RV32-NEXT:    li a1, -1303; RV32-NEXT:    sw a1, 0(a0)304; RV32-NEXT:    sw a1, 4(a0)305; RV32-NEXT:    sw a1, 8(a0)306; RV32-NEXT:    sw a1, 12(a0)307; RV32-NEXT:    ret308;309; RV64-LABEL: combine_allones_stores_2xi64:310; RV64:       # %bb.0:311; RV64-NEXT:    li a1, -1312; RV64-NEXT:    sd a1, 0(a0)313; RV64-NEXT:    sd a1, 8(a0)314; RV64-NEXT:    ret315  store i64 -1, ptr %p316  %gep = getelementptr i8, ptr %p, i64 8317  store i64 -1, ptr %gep318  ret void319}320