brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.5 KiB · 9312309 Raw
421 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=z15 %s -mtriple=s390x-linux-gnu -o - | FileCheck %s3;4; Test memsets of small constant lengths, that should not be done with MVC.5 6declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)7 8define void @reg17(ptr %Dst, i8 %val) {9; CHECK-LABEL: reg17:10; CHECK:       # %bb.0:11; CHECK-NEXT:    stc %r3, 0(%r2)12; CHECK-NEXT:    mvc 1(16,%r2), 0(%r2)13; CHECK-NEXT:    br %r1414  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 17, i1 false)15  ret void16}17 18define void @reg18(ptr %Dst, i8 %val) {19; CHECK-LABEL: reg18:20; CHECK:       # %bb.0:21; CHECK-NEXT:    vlvgp %v0, %r3, %r322; CHECK-NEXT:    vrepb %v0, %v0, 723; CHECK-NEXT:    vst %v0, 0(%r2), 424; CHECK-NEXT:    vsteh %v0, 16(%r2), 025; CHECK-NEXT:    br %r1426  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 18, i1 false)27  ret void28}29 30define void @reg19(ptr %Dst, i8 %val) {31; CHECK-LABEL: reg19:32; CHECK:       # %bb.0:33; CHECK-NEXT:    vlvgp %v0, %r3, %r334; CHECK-NEXT:    vrepb %v0, %v0, 735; CHECK-NEXT:    vstef %v0, 15(%r2), 036; CHECK-NEXT:    vst %v0, 0(%r2), 437; CHECK-NEXT:    br %r1438  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 19, i1 false)39  ret void40}41 42define void @reg20(ptr %Dst, i8 %val) {43; CHECK-LABEL: reg20:44; CHECK:       # %bb.0:45; CHECK-NEXT:    vlvgp %v0, %r3, %r346; CHECK-NEXT:    vrepb %v0, %v0, 747; CHECK-NEXT:    vstef %v0, 16(%r2), 048; CHECK-NEXT:    vst %v0, 0(%r2), 449; CHECK-NEXT:    br %r1450  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 20, i1 false)51  ret void52}53 54define void @reg21(ptr %Dst, i8 %val) {55; CHECK-LABEL: reg21:56; CHECK:       # %bb.0:57; CHECK-NEXT:    vlvgp %v0, %r3, %r358; CHECK-NEXT:    vrepb %v0, %v0, 759; CHECK-NEXT:    vsteg %v0, 13(%r2), 060; CHECK-NEXT:    vst %v0, 0(%r2), 461; CHECK-NEXT:    br %r1462  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 21, i1 false)63  ret void64}65 66define void @reg22(ptr %Dst, i8 %val) {67; CHECK-LABEL: reg22:68; CHECK:       # %bb.0:69; CHECK-NEXT:    vlvgp %v0, %r3, %r370; CHECK-NEXT:    vrepb %v0, %v0, 771; CHECK-NEXT:    vsteg %v0, 14(%r2), 072; CHECK-NEXT:    vst %v0, 0(%r2), 473; CHECK-NEXT:    br %r1474  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 22, i1 false)75  ret void76}77 78define void @reg23(ptr %Dst, i8 %val) {79; CHECK-LABEL: reg23:80; CHECK:       # %bb.0:81; CHECK-NEXT:    vlvgp %v0, %r3, %r382; CHECK-NEXT:    vrepb %v0, %v0, 783; CHECK-NEXT:    vsteg %v0, 15(%r2), 084; CHECK-NEXT:    vst %v0, 0(%r2), 485; CHECK-NEXT:    br %r1486  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 23, i1 false)87  ret void88}89 90define void @reg24(ptr %Dst, i8 %val) {91; CHECK-LABEL: reg24:92; CHECK:       # %bb.0:93; CHECK-NEXT:    vlvgp %v0, %r3, %r394; CHECK-NEXT:    vrepb %v0, %v0, 795; CHECK-NEXT:    vsteg %v0, 16(%r2), 096; CHECK-NEXT:    vst %v0, 0(%r2), 497; CHECK-NEXT:    br %r1498  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 24, i1 false)99  ret void100}101 102define void @reg25(ptr %Dst, i8 %val) {103; CHECK-LABEL: reg25:104; CHECK:       # %bb.0:105; CHECK-NEXT:    vlvgp %v0, %r3, %r3106; CHECK-NEXT:    vrepb %v0, %v0, 7107; CHECK-NEXT:    vst %v0, 9(%r2)108; CHECK-NEXT:    vst %v0, 0(%r2), 4109; CHECK-NEXT:    br %r14110  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 25, i1 false)111  ret void112}113 114define void @reg26(ptr %Dst, i8 %val) {115; CHECK-LABEL: reg26:116; CHECK:       # %bb.0:117; CHECK-NEXT:    vlvgp %v0, %r3, %r3118; CHECK-NEXT:    vrepb %v0, %v0, 7119; CHECK-NEXT:    vst %v0, 10(%r2)120; CHECK-NEXT:    vst %v0, 0(%r2), 4121; CHECK-NEXT:    br %r14122  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 26, i1 false)123  ret void124}125 126define void @reg27(ptr %Dst, i8 %val) {127; CHECK-LABEL: reg27:128; CHECK:       # %bb.0:129; CHECK-NEXT:    vlvgp %v0, %r3, %r3130; CHECK-NEXT:    vrepb %v0, %v0, 7131; CHECK-NEXT:    vst %v0, 11(%r2)132; CHECK-NEXT:    vst %v0, 0(%r2), 4133; CHECK-NEXT:    br %r14134  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 27, i1 false)135  ret void136}137 138define void @reg28(ptr %Dst, i8 %val) {139; CHECK-LABEL: reg28:140; CHECK:       # %bb.0:141; CHECK-NEXT:    vlvgp %v0, %r3, %r3142; CHECK-NEXT:    vrepb %v0, %v0, 7143; CHECK-NEXT:    vst %v0, 12(%r2)144; CHECK-NEXT:    vst %v0, 0(%r2), 4145; CHECK-NEXT:    br %r14146  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 28, i1 false)147  ret void148}149 150define void @reg29(ptr %Dst, i8 %val) {151; CHECK-LABEL: reg29:152; CHECK:       # %bb.0:153; CHECK-NEXT:    vlvgp %v0, %r3, %r3154; CHECK-NEXT:    vrepb %v0, %v0, 7155; CHECK-NEXT:    vst %v0, 13(%r2)156; CHECK-NEXT:    vst %v0, 0(%r2), 4157; CHECK-NEXT:    br %r14158  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 29, i1 false)159  ret void160}161 162define void @reg30(ptr %Dst, i8 %val) {163; CHECK-LABEL: reg30:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vlvgp %v0, %r3, %r3166; CHECK-NEXT:    vrepb %v0, %v0, 7167; CHECK-NEXT:    vst %v0, 14(%r2)168; CHECK-NEXT:    vst %v0, 0(%r2), 4169; CHECK-NEXT:    br %r14170  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 30, i1 false)171  ret void172}173 174define void @reg31(ptr %Dst, i8 %val) {175; CHECK-LABEL: reg31:176; CHECK:       # %bb.0:177; CHECK-NEXT:    vlvgp %v0, %r3, %r3178; CHECK-NEXT:    vrepb %v0, %v0, 7179; CHECK-NEXT:    vst %v0, 15(%r2)180; CHECK-NEXT:    vst %v0, 0(%r2), 4181; CHECK-NEXT:    br %r14182  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 31, i1 false)183  ret void184}185 186define void @reg32(ptr %Dst, i8 %val) {187; CHECK-LABEL: reg32:188; CHECK:       # %bb.0:189; CHECK-NEXT:    vlvgp %v0, %r3, %r3190; CHECK-NEXT:    vrepb %v0, %v0, 7191; CHECK-NEXT:    vst %v0, 16(%r2), 4192; CHECK-NEXT:    vst %v0, 0(%r2), 4193; CHECK-NEXT:    br %r14194  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 32, i1 false)195  ret void196}197 198define void @reg33(ptr %Dst, i8 %val) {199; CHECK-LABEL: reg33:200; CHECK:       # %bb.0:201; CHECK-NEXT:    stc %r3, 0(%r2)202; CHECK-NEXT:    mvc 1(32,%r2), 0(%r2)203; CHECK-NEXT:    br %r14204  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 %val, i64 33, i1 false)205  ret void206}207 208;; Immediate value209 210define void @imm17(ptr %Dst) {211; CHECK-LABEL: imm17:212; CHECK:       # %bb.0:213; CHECK-NEXT:    mvi 0(%r2), 1214; CHECK-NEXT:    mvc 1(16,%r2), 0(%r2)215; CHECK-NEXT:    br %r14216  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 17, i1 false)217  ret void218}219 220define void @imm18(ptr %Dst) {221; CHECK-LABEL: imm18:222; CHECK:       # %bb.0:223; CHECK-NEXT:    vgbm %v0, 65535224; CHECK-NEXT:    vst %v0, 0(%r2), 4225; CHECK-NEXT:    mvhhi 16(%r2), -1226; CHECK-NEXT:    br %r14227  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 18, i1 false)228  ret void229}230 231define void @zero18(ptr %Dst) {232; CHECK-LABEL: zero18:233; CHECK:       # %bb.0:234; CHECK-NEXT:    xc 0(18,%r2), 0(%r2)235; CHECK-NEXT:    br %r14236  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 0, i64 18, i1 false)237  ret void238}239 240define void @imm19(ptr %Dst) {241; CHECK-LABEL: imm19:242; CHECK:       # %bb.0:243; CHECK-NEXT:    vrepib %v0, 1244; CHECK-NEXT:    vstef %v0, 15(%r2), 0245; CHECK-NEXT:    vst %v0, 0(%r2), 4246; CHECK-NEXT:    br %r14247  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 19, i1 false)248  ret void249}250 251define void @imm20(ptr %Dst) {252; CHECK-LABEL: imm20:253; CHECK:       # %bb.0:254; CHECK-NEXT:    vgbm %v0, 65535255; CHECK-NEXT:    vst %v0, 0(%r2), 4256; CHECK-NEXT:    mvhi 16(%r2), -1257; CHECK-NEXT:    br %r14258  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 20, i1 false)259  ret void260}261 262define void @imm21(ptr %Dst) {263; CHECK-LABEL: imm21:264; CHECK:       # %bb.0:265; CHECK-NEXT:    vrepib %v0, 1266; CHECK-NEXT:    vsteg %v0, 13(%r2), 0267; CHECK-NEXT:    vst %v0, 0(%r2), 4268; CHECK-NEXT:    br %r14269  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 21, i1 false)270  ret void271}272 273define void @imm22(ptr %Dst) {274; CHECK-LABEL: imm22:275; CHECK:       # %bb.0:276; CHECK-NEXT:    vgbm %v0, 65535277; CHECK-NEXT:    vst %v0, 0(%r2), 4278; CHECK-NEXT:    mvghi 14(%r2), -1279; CHECK-NEXT:    br %r14280  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 22, i1 false)281  ret void282}283 284define void @imm23(ptr %Dst) {285; CHECK-LABEL: imm23:286; CHECK:       # %bb.0:287; CHECK-NEXT:    vrepib %v0, 1288; CHECK-NEXT:    vsteg %v0, 15(%r2), 0289; CHECK-NEXT:    vst %v0, 0(%r2), 4290; CHECK-NEXT:    br %r14291  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 23, i1 false)292  ret void293}294 295define void @imm24(ptr %Dst) {296; CHECK-LABEL: imm24:297; CHECK:       # %bb.0:298; CHECK-NEXT:    vgbm %v0, 65535299; CHECK-NEXT:    vst %v0, 0(%r2), 4300; CHECK-NEXT:    mvghi 16(%r2), -1301; CHECK-NEXT:    br %r14302  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 24, i1 false)303  ret void304}305 306define void @imm25(ptr %Dst) {307; CHECK-LABEL: imm25:308; CHECK:       # %bb.0:309; CHECK-NEXT:    vrepib %v0, 1310; CHECK-NEXT:    vst %v0, 9(%r2)311; CHECK-NEXT:    vst %v0, 0(%r2), 4312; CHECK-NEXT:    br %r14313  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 25, i1 false)314  ret void315}316 317define void @imm26(ptr %Dst) {318; CHECK-LABEL: imm26:319; CHECK:       # %bb.0:320; CHECK-NEXT:    vgbm %v0, 65535321; CHECK-NEXT:    vst %v0, 10(%r2)322; CHECK-NEXT:    vst %v0, 0(%r2), 4323; CHECK-NEXT:    br %r14324  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 26, i1 false)325  ret void326}327 328define void @zero26(ptr %Dst) {329; CHECK-LABEL: zero26:330; CHECK:       # %bb.0:331; CHECK-NEXT:    xc 0(26,%r2), 0(%r2)332; CHECK-NEXT:    br %r14333  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 0, i64 26, i1 false)334  ret void335}336 337define void @imm27(ptr %Dst) {338; CHECK-LABEL: imm27:339; CHECK:       # %bb.0:340; CHECK-NEXT:    vrepib %v0, 1341; CHECK-NEXT:    vst %v0, 11(%r2)342; CHECK-NEXT:    vst %v0, 0(%r2), 4343; CHECK-NEXT:    br %r14344  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 27, i1 false)345  ret void346}347 348define void @imm28(ptr %Dst) {349; CHECK-LABEL: imm28:350; CHECK:       # %bb.0:351; CHECK-NEXT:    vgbm %v0, 65535352; CHECK-NEXT:    vst %v0, 12(%r2)353; CHECK-NEXT:    vst %v0, 0(%r2), 4354; CHECK-NEXT:    br %r14355  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 28, i1 false)356  ret void357}358 359define void @imm29(ptr %Dst) {360; CHECK-LABEL: imm29:361; CHECK:       # %bb.0:362; CHECK-NEXT:    vrepib %v0, 1363; CHECK-NEXT:    vst %v0, 13(%r2)364; CHECK-NEXT:    vst %v0, 0(%r2), 4365; CHECK-NEXT:    br %r14366  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 29, i1 false)367  ret void368}369 370define void @imm30(ptr %Dst) {371; CHECK-LABEL: imm30:372; CHECK:       # %bb.0:373; CHECK-NEXT:    vgbm %v0, 65535374; CHECK-NEXT:    vst %v0, 14(%r2)375; CHECK-NEXT:    vst %v0, 0(%r2), 4376; CHECK-NEXT:    br %r14377  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 30, i1 false)378  ret void379}380 381define void @imm31(ptr %Dst) {382; CHECK-LABEL: imm31:383; CHECK:       # %bb.0:384; CHECK-NEXT:    vrepib %v0, 1385; CHECK-NEXT:    vst %v0, 15(%r2)386; CHECK-NEXT:    vst %v0, 0(%r2), 4387; CHECK-NEXT:    br %r14388  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 31, i1 false)389  ret void390}391 392define void @imm32(ptr %Dst) {393; CHECK-LABEL: imm32:394; CHECK:       # %bb.0:395; CHECK-NEXT:    vgbm %v0, 65535396; CHECK-NEXT:    vst %v0, 16(%r2), 4397; CHECK-NEXT:    vst %v0, 0(%r2), 4398; CHECK-NEXT:    br %r14399  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 -1, i64 32, i1 false)400  ret void401}402 403define void @zero32(ptr %Dst) {404; CHECK-LABEL: zero32:405; CHECK:       # %bb.0:406; CHECK-NEXT:    xc 0(32,%r2), 0(%r2)407; CHECK-NEXT:    br %r14408  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 0, i64 32, i1 false)409  ret void410}411 412define void @imm33(ptr %Dst) {413; CHECK-LABEL: imm33:414; CHECK:       # %bb.0:415; CHECK-NEXT:    mvi 0(%r2), 1416; CHECK-NEXT:    mvc 1(32,%r2), 0(%r2)417; CHECK-NEXT:    br %r14418  call void @llvm.memset.p0.i64(ptr align 16 %Dst, i8 1, i64 33, i1 false)419  ret void420}421