brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · 9422495 Raw
329 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown -mattr=+vpu | FileCheck %s2 3; ISA-compatible vector broadcasts4define fastcc <256 x i64> @brd_v256i64(i64 %s) {5; CHECK-LABEL: brd_v256i64:6; CHECK:       # %bb.0:7; CHECK-NEXT:    lea %s1, 2568; CHECK-NEXT:    lvl %s19; CHECK-NEXT:    vbrd %v0, %s010; CHECK-NEXT:    b.l.t (, %s10)11  %val = insertelement <256 x i64> undef, i64 %s, i32 012  %ret = shufflevector <256 x i64> %val, <256 x i64> undef, <256 x i32> zeroinitializer13  ret <256 x i64> %ret14}15 16define fastcc <256 x i64> @brdi_v256i64() {17; CHECK-LABEL: brdi_v256i64:18; CHECK:       # %bb.0:19; CHECK-NEXT:    lea %s0, 25620; CHECK-NEXT:    lvl %s021; CHECK-NEXT:    vbrd %v0, 122; CHECK-NEXT:    b.l.t (, %s10)23  %val = insertelement <256 x i64> undef, i64 1, i32 024  %ret = shufflevector <256 x i64> %val, <256 x i64> undef, <256 x i32> zeroinitializer25  ret <256 x i64> %ret26}27 28define fastcc <256 x double> @brd_v256f64(double %s) {29; CHECK-LABEL: brd_v256f64:30; CHECK:       # %bb.0:31; CHECK-NEXT:    lea %s1, 25632; CHECK-NEXT:    lvl %s133; CHECK-NEXT:    vbrd %v0, %s034; CHECK-NEXT:    b.l.t (, %s10)35  %val = insertelement <256 x double> undef, double %s, i32 036  %ret = shufflevector <256 x double> %val, <256 x double> undef, <256 x i32> zeroinitializer37  ret <256 x double> %ret38}39 40define fastcc <256 x double> @brdi_v256f64() {41; CHECK-LABEL: brdi_v256f64:42; CHECK:       # %bb.0:43; CHECK-NEXT:    lea %s0, 25644; CHECK-NEXT:    lvl %s045; CHECK-NEXT:    vbrd %v0, 046; CHECK-NEXT:    b.l.t (, %s10)47  %val = insertelement <256 x double> undef, double 0.e+00, i32 048  %ret = shufflevector <256 x double> %val, <256 x double> undef, <256 x i32> zeroinitializer49  ret <256 x double> %ret50}51 52define fastcc <256 x i32> @brd_v256i32(i32 %s) {53; CHECK-LABEL: brd_v256i32:54; CHECK:       # %bb.0:55; CHECK-NEXT:    and %s0, %s0, (32)056; CHECK-NEXT:    lea %s1, 25657; CHECK-NEXT:    lvl %s158; CHECK-NEXT:    vbrd %v0, %s059; CHECK-NEXT:    b.l.t (, %s10)60  %val = insertelement <256 x i32> undef, i32 %s, i32 061  %ret = shufflevector <256 x i32> %val, <256 x i32> undef, <256 x i32> zeroinitializer62  ret <256 x i32> %ret63}64 65define fastcc <256 x i32> @brdi_v256i32(i32 %s) {66; CHECK-LABEL: brdi_v256i32:67; CHECK:       # %bb.0:68; CHECK-NEXT:    lea %s0, 25669; CHECK-NEXT:    lvl %s070; CHECK-NEXT:    vbrd %v0, 1371; CHECK-NEXT:    b.l.t (, %s10)72  %val = insertelement <256 x i32> undef, i32 13, i32 073  %ret = shufflevector <256 x i32> %val, <256 x i32> undef, <256 x i32> zeroinitializer74  ret <256 x i32> %ret75}76 77define fastcc <256 x float> @brd_v256f32(float %s) {78; CHECK-LABEL: brd_v256f32:79; CHECK:       # %bb.0:80; CHECK-NEXT:    lea %s1, 25681; CHECK-NEXT:    lvl %s182; CHECK-NEXT:    vbrd %v0, %s083; CHECK-NEXT:    b.l.t (, %s10)84  %val = insertelement <256 x float> undef, float %s, i32 085  %ret = shufflevector <256 x float> %val, <256 x float> undef, <256 x i32> zeroinitializer86  ret <256 x float> %ret87}88 89define fastcc <256 x float> @brdi_v256f32(float %s) {90; CHECK-LABEL: brdi_v256f32:91; CHECK:       # %bb.0:92; CHECK-NEXT:    lea %s0, 25693; CHECK-NEXT:    lvl %s094; CHECK-NEXT:    vbrd %v0, 095; CHECK-NEXT:    b.l.t (, %s10)96  %val = insertelement <256 x float> undef, float 0.e+00, i32 097  %ret = shufflevector <256 x float> %val, <256 x float> undef, <256 x i32> zeroinitializer98  ret <256 x float> %ret99}100 101 102; Shorter vectors, we expect these to be widened (for now).103define fastcc <128 x i64> @brd_v128i64(i64 %s) {104; CHECK-LABEL: brd_v128i64:105; CHECK:       # %bb.0:106; CHECK-NEXT:    lea %s1, 256107; CHECK-NEXT:    lvl %s1108; CHECK-NEXT:    vbrd %v0, %s0109; CHECK-NEXT:    b.l.t (, %s10)110  %val = insertelement <128 x i64> undef, i64 %s, i32 0111  %ret = shufflevector <128 x i64> %val, <128 x i64> undef, <128 x i32> zeroinitializer112  ret <128 x i64> %ret113}114 115define fastcc <128 x double> @brd_v128f64(double %s) {116; CHECK-LABEL: brd_v128f64:117; CHECK:       # %bb.0:118; CHECK-NEXT:    lea %s1, 256119; CHECK-NEXT:    lvl %s1120; CHECK-NEXT:    vbrd %v0, %s0121; CHECK-NEXT:    b.l.t (, %s10)122  %val = insertelement <128 x double> undef, double %s, i32 0123  %ret = shufflevector <128 x double> %val, <128 x double> undef, <128 x i32> zeroinitializer124  ret <128 x double> %ret125}126 127define fastcc <128 x i32> @brd_v128i32(i32 %s) {128; CHECK-LABEL: brd_v128i32:129; CHECK:       # %bb.0:130; CHECK-NEXT:    and %s0, %s0, (32)0131; CHECK-NEXT:    lea %s1, 256132; CHECK-NEXT:    lvl %s1133; CHECK-NEXT:    vbrd %v0, %s0134; CHECK-NEXT:    b.l.t (, %s10)135  %val = insertelement <128 x i32> undef, i32 %s, i32 0136  %ret = shufflevector <128 x i32> %val, <128 x i32> undef, <128 x i32> zeroinitializer137  ret <128 x i32> %ret138}139 140define fastcc <128 x i32> @brdi_v128i32(i32 %s) {141; CHECK-LABEL: brdi_v128i32:142; CHECK:       # %bb.0:143; CHECK-NEXT:    lea %s0, 256144; CHECK-NEXT:    lvl %s0145; CHECK-NEXT:    vbrd %v0, 13146; CHECK-NEXT:    b.l.t (, %s10)147  %val = insertelement <128 x i32> undef, i32 13, i32 0148  %ret = shufflevector <128 x i32> %val, <128 x i32> undef, <128 x i32> zeroinitializer149  ret <128 x i32> %ret150}151 152define fastcc <128 x float> @brd_v128f32(float %s) {153; CHECK-LABEL: brd_v128f32:154; CHECK:       # %bb.0:155; CHECK-NEXT:    lea %s1, 256156; CHECK-NEXT:    lvl %s1157; CHECK-NEXT:    vbrd %v0, %s0158; CHECK-NEXT:    b.l.t (, %s10)159  %val = insertelement <128 x float> undef, float %s, i32 0160  %ret = shufflevector <128 x float> %val, <128 x float> undef, <128 x i32> zeroinitializer161  ret <128 x float> %ret162}163 164define fastcc <128 x float> @brdi_v128f32(float %s) {165; CHECK-LABEL: brdi_v128f32:166; CHECK:       # %bb.0:167; CHECK-NEXT:    lea %s0, 256168; CHECK-NEXT:    lvl %s0169; CHECK-NEXT:    vbrd %v0, 0170; CHECK-NEXT:    b.l.t (, %s10)171  %val = insertelement <128 x float> undef, float 0.e+00, i32 0172  %ret = shufflevector <128 x float> %val, <128 x float> undef, <128 x i32> zeroinitializer173  ret <128 x float> %ret174}175 176; Vectors with small element types and valid element count, we expect those to be promoted.177define fastcc <256 x i16> @brd_v256i16(i16 %s) {178; CHECK-LABEL: brd_v256i16:179; CHECK:       # %bb.0:180; CHECK-NEXT:    and %s0, %s0, (32)0181; CHECK-NEXT:    lea %s1, 256182; CHECK-NEXT:    lvl %s1183; CHECK-NEXT:    vbrd %v0, %s0184; CHECK-NEXT:    b.l.t (, %s10)185  %val = insertelement <256 x i16> undef, i16 %s, i32 0186  %ret = shufflevector <256 x i16> %val, <256 x i16> undef, <256 x i32> zeroinitializer187  ret <256 x i16> %ret188}189 190; Vectors with small element types and low element count, these are scalarized for now.191; FIXME Promote + Widen192define fastcc <128 x i16> @brd_v128i16(i16 %s) {193; CHECK-LABEL: brd_v128i16:194; CHECK:       # %bb.0:195; CHECK-NEXT:    and %s1, %s1, (32)0196; CHECK-NEXT:    st2b %s1, 254(, %s0)197; CHECK-NEXT:    st2b %s1, 252(, %s0)198; CHECK-NEXT:    st2b %s1, 250(, %s0)199; CHECK-NEXT:    st2b %s1, 248(, %s0)200; CHECK-NEXT:    st2b %s1, 246(, %s0)201; CHECK-NEXT:    st2b %s1, 244(, %s0)202; CHECK-NEXT:    st2b %s1, 242(, %s0)203; CHECK-NEXT:    st2b %s1, 240(, %s0)204; CHECK-NEXT:    st2b %s1, 238(, %s0)205; CHECK-NEXT:    st2b %s1, 236(, %s0)206; CHECK-NEXT:    st2b %s1, 234(, %s0)207; CHECK-NEXT:    st2b %s1, 232(, %s0)208; CHECK-NEXT:    st2b %s1, 230(, %s0)209; CHECK-NEXT:    st2b %s1, 228(, %s0)210; CHECK-NEXT:    st2b %s1, 226(, %s0)211; CHECK-NEXT:    st2b %s1, 224(, %s0)212; CHECK-NEXT:    st2b %s1, 222(, %s0)213; CHECK-NEXT:    st2b %s1, 220(, %s0)214; CHECK-NEXT:    st2b %s1, 218(, %s0)215; CHECK-NEXT:    st2b %s1, 216(, %s0)216; CHECK-NEXT:    st2b %s1, 214(, %s0)217; CHECK-NEXT:    st2b %s1, 212(, %s0)218; CHECK-NEXT:    st2b %s1, 210(, %s0)219; CHECK-NEXT:    st2b %s1, 208(, %s0)220; CHECK-NEXT:    st2b %s1, 206(, %s0)221; CHECK-NEXT:    st2b %s1, 204(, %s0)222; CHECK-NEXT:    st2b %s1, 202(, %s0)223; CHECK-NEXT:    st2b %s1, 200(, %s0)224; CHECK-NEXT:    st2b %s1, 198(, %s0)225; CHECK-NEXT:    st2b %s1, 196(, %s0)226; CHECK-NEXT:    st2b %s1, 194(, %s0)227; CHECK-NEXT:    st2b %s1, 192(, %s0)228; CHECK-NEXT:    st2b %s1, 190(, %s0)229; CHECK-NEXT:    st2b %s1, 188(, %s0)230; CHECK-NEXT:    st2b %s1, 186(, %s0)231; CHECK-NEXT:    st2b %s1, 184(, %s0)232; CHECK-NEXT:    st2b %s1, 182(, %s0)233; CHECK-NEXT:    st2b %s1, 180(, %s0)234; CHECK-NEXT:    st2b %s1, 178(, %s0)235; CHECK-NEXT:    st2b %s1, 176(, %s0)236; CHECK-NEXT:    st2b %s1, 174(, %s0)237; CHECK-NEXT:    st2b %s1, 172(, %s0)238; CHECK-NEXT:    st2b %s1, 170(, %s0)239; CHECK-NEXT:    st2b %s1, 168(, %s0)240; CHECK-NEXT:    st2b %s1, 166(, %s0)241; CHECK-NEXT:    st2b %s1, 164(, %s0)242; CHECK-NEXT:    st2b %s1, 162(, %s0)243; CHECK-NEXT:    st2b %s1, 160(, %s0)244; CHECK-NEXT:    st2b %s1, 158(, %s0)245; CHECK-NEXT:    st2b %s1, 156(, %s0)246; CHECK-NEXT:    st2b %s1, 154(, %s0)247; CHECK-NEXT:    st2b %s1, 152(, %s0)248; CHECK-NEXT:    st2b %s1, 150(, %s0)249; CHECK-NEXT:    st2b %s1, 148(, %s0)250; CHECK-NEXT:    st2b %s1, 146(, %s0)251; CHECK-NEXT:    st2b %s1, 144(, %s0)252; CHECK-NEXT:    st2b %s1, 142(, %s0)253; CHECK-NEXT:    st2b %s1, 140(, %s0)254; CHECK-NEXT:    st2b %s1, 138(, %s0)255; CHECK-NEXT:    st2b %s1, 136(, %s0)256; CHECK-NEXT:    st2b %s1, 134(, %s0)257; CHECK-NEXT:    st2b %s1, 132(, %s0)258; CHECK-NEXT:    st2b %s1, 130(, %s0)259; CHECK-NEXT:    st2b %s1, 128(, %s0)260; CHECK-NEXT:    st2b %s1, 126(, %s0)261; CHECK-NEXT:    st2b %s1, 124(, %s0)262; CHECK-NEXT:    st2b %s1, 122(, %s0)263; CHECK-NEXT:    st2b %s1, 120(, %s0)264; CHECK-NEXT:    st2b %s1, 118(, %s0)265; CHECK-NEXT:    st2b %s1, 116(, %s0)266; CHECK-NEXT:    st2b %s1, 114(, %s0)267; CHECK-NEXT:    st2b %s1, 112(, %s0)268; CHECK-NEXT:    st2b %s1, 110(, %s0)269; CHECK-NEXT:    st2b %s1, 108(, %s0)270; CHECK-NEXT:    st2b %s1, 106(, %s0)271; CHECK-NEXT:    st2b %s1, 104(, %s0)272; CHECK-NEXT:    st2b %s1, 102(, %s0)273; CHECK-NEXT:    st2b %s1, 100(, %s0)274; CHECK-NEXT:    st2b %s1, 98(, %s0)275; CHECK-NEXT:    st2b %s1, 96(, %s0)276; CHECK-NEXT:    st2b %s1, 94(, %s0)277; CHECK-NEXT:    st2b %s1, 92(, %s0)278; CHECK-NEXT:    st2b %s1, 90(, %s0)279; CHECK-NEXT:    st2b %s1, 88(, %s0)280; CHECK-NEXT:    st2b %s1, 86(, %s0)281; CHECK-NEXT:    st2b %s1, 84(, %s0)282; CHECK-NEXT:    st2b %s1, 82(, %s0)283; CHECK-NEXT:    st2b %s1, 80(, %s0)284; CHECK-NEXT:    st2b %s1, 78(, %s0)285; CHECK-NEXT:    st2b %s1, 76(, %s0)286; CHECK-NEXT:    st2b %s1, 74(, %s0)287; CHECK-NEXT:    st2b %s1, 72(, %s0)288; CHECK-NEXT:    st2b %s1, 70(, %s0)289; CHECK-NEXT:    st2b %s1, 68(, %s0)290; CHECK-NEXT:    st2b %s1, 66(, %s0)291; CHECK-NEXT:    st2b %s1, 64(, %s0)292; CHECK-NEXT:    st2b %s1, 62(, %s0)293; CHECK-NEXT:    st2b %s1, 60(, %s0)294; CHECK-NEXT:    st2b %s1, 58(, %s0)295; CHECK-NEXT:    st2b %s1, 56(, %s0)296; CHECK-NEXT:    st2b %s1, 54(, %s0)297; CHECK-NEXT:    st2b %s1, 52(, %s0)298; CHECK-NEXT:    st2b %s1, 50(, %s0)299; CHECK-NEXT:    st2b %s1, 48(, %s0)300; CHECK-NEXT:    st2b %s1, 46(, %s0)301; CHECK-NEXT:    st2b %s1, 44(, %s0)302; CHECK-NEXT:    st2b %s1, 42(, %s0)303; CHECK-NEXT:    st2b %s1, 40(, %s0)304; CHECK-NEXT:    st2b %s1, 38(, %s0)305; CHECK-NEXT:    st2b %s1, 36(, %s0)306; CHECK-NEXT:    st2b %s1, 34(, %s0)307; CHECK-NEXT:    st2b %s1, 32(, %s0)308; CHECK-NEXT:    st2b %s1, 30(, %s0)309; CHECK-NEXT:    st2b %s1, 28(, %s0)310; CHECK-NEXT:    st2b %s1, 26(, %s0)311; CHECK-NEXT:    st2b %s1, 24(, %s0)312; CHECK-NEXT:    st2b %s1, 22(, %s0)313; CHECK-NEXT:    st2b %s1, 20(, %s0)314; CHECK-NEXT:    st2b %s1, 18(, %s0)315; CHECK-NEXT:    st2b %s1, 16(, %s0)316; CHECK-NEXT:    st2b %s1, 14(, %s0)317; CHECK-NEXT:    st2b %s1, 12(, %s0)318; CHECK-NEXT:    st2b %s1, 10(, %s0)319; CHECK-NEXT:    st2b %s1, 8(, %s0)320; CHECK-NEXT:    st2b %s1, 6(, %s0)321; CHECK-NEXT:    st2b %s1, 4(, %s0)322; CHECK-NEXT:    st2b %s1, 2(, %s0)323; CHECK-NEXT:    st2b %s1, (, %s0)324; CHECK-NEXT:    b.l.t (, %s10)325  %val = insertelement <128 x i16> undef, i16 %s, i32 0326  %ret = shufflevector <128 x i16> %val, <128 x i16> undef, <128 x i32> zeroinitializer327  ret <128 x i16> %ret328}329