brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.6 KiB · e02f931 Raw
406 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --default-march s390x-unknown-linux-gnu --version 52; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z16 < %s | FileCheck %s -check-prefixes=Z163 4define half @canonicalize_fp16(half %a) nounwind {5; Z16-LABEL: canonicalize_fp16:6; Z16:       # %bb.0:7; Z16-NEXT:    stmg %r14, %r15, 112(%r15)8; Z16-NEXT:    aghi %r15, -1609; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT10; Z16-NEXT:    vgmf %v1, 2, 811; Z16-NEXT:    meebr %f0, %f112; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT13; Z16-NEXT:    lmg %r14, %r15, 272(%r15)14; Z16-NEXT:    br %r1415  %canonicalized = call half @llvm.canonicalize.f16(half %a)16  ret half %canonicalized17}18define float @canonicalize_fp32(float %a) {19; Z16-LABEL: canonicalize_fp32:20; Z16:       # %bb.0:21; Z16-NEXT:    vgmf %v1, 2, 822; Z16-NEXT:    meebr %f0, %f123; Z16-NEXT:    br %r1424  %canonicalized = call float @llvm.canonicalize.f32(float %a)25  ret float %canonicalized26}27 28define double @canonicalize_fp64(double %a) {29; Z16-LABEL: canonicalize_fp64:30; Z16:       # %bb.0:31; Z16-NEXT:    vgmg %v1, 2, 1132; Z16-NEXT:    mdbr %f0, %f133; Z16-NEXT:    br %r1434  %canonicalized = call double @llvm.canonicalize.f64(double %a)35  ret double %canonicalized36}37 38define fp128 @canonicalize_fp128(fp128 %a) {39; Z16-LABEL: canonicalize_fp128:40; Z16:       # %bb.0:41; Z16-NEXT:    larl %r1, .LCPI3_042; Z16-NEXT:    vl %v0, 0(%r3), 343; Z16-NEXT:    vl %v1, 0(%r1), 344; Z16-NEXT:    wfmxb %v0, %v0, %v145; Z16-NEXT:    vst %v0, 0(%r2), 346; Z16-NEXT:    br %r1447  %canonicalized = call fp128 @llvm.canonicalize.f128(fp128 %a)48  ret fp128 %canonicalized49}50 51define void @canonicalize_ptr_f16(ptr %out) nounwind {52; Z16-LABEL: canonicalize_ptr_f16:53; Z16:       # %bb.0:54; Z16-NEXT:    stmg %r13, %r15, 104(%r15)55; Z16-NEXT:    aghi %r15, -16056; Z16-NEXT:    vlreph %v0, 0(%r2)57; Z16-NEXT:    lgr %r13, %r258; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT59; Z16-NEXT:    vgmf %v1, 2, 860; Z16-NEXT:    meebr %f0, %f161; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT62; Z16-NEXT:    vsteh %v0, 0(%r13), 063; Z16-NEXT:    lmg %r13, %r15, 264(%r15)64; Z16-NEXT:    br %r1465  %val = load half, ptr %out66  %canonicalized = call half @llvm.canonicalize.f16(half %val)67  store half %canonicalized, ptr %out68  ret void69}70 71define void @canonicalize_ptr_f32(ptr %out) {72; Z16-LABEL: canonicalize_ptr_f32:73; Z16:       # %bb.0:74; Z16-NEXT:    vgmf %v0, 2, 875; Z16-NEXT:    meeb %f0, 0(%r2)76; Z16-NEXT:    ste %f0, 0(%r2)77; Z16-NEXT:    br %r1478  %val = load float, ptr %out79  %canonicalized = call float @llvm.canonicalize.f32(float %val)80  store float %canonicalized, ptr %out81  ret void82}83 84define void @canonicalize_ptr_f64(ptr %out) {85; Z16-LABEL: canonicalize_ptr_f64:86; Z16:       # %bb.0:87; Z16-NEXT:    vgmg %v0, 2, 1188; Z16-NEXT:    mdb %f0, 0(%r2)89; Z16-NEXT:    std %f0, 0(%r2)90; Z16-NEXT:    br %r1491  %val = load double, ptr %out92  %canonicalized = call double @llvm.canonicalize.f64(double %val)93  store double %canonicalized, ptr %out94  ret void95}96 97define void @canonicalize_ptr_f128(ptr %out) {98; Z16-LABEL: canonicalize_ptr_f128:99; Z16:       # %bb.0:100; Z16-NEXT:    larl %r1, .LCPI7_0101; Z16-NEXT:    vl %v0, 0(%r2), 3102; Z16-NEXT:    vl %v1, 0(%r1), 3103; Z16-NEXT:    wfmxb %v0, %v0, %v1104; Z16-NEXT:    vst %v0, 0(%r2), 3105; Z16-NEXT:    br %r14106  %val = load fp128, ptr %out107  %canonicalized = call fp128 @llvm.canonicalize.f128(fp128 %val)108  store fp128 %canonicalized, ptr %out109  ret void110}111define <8 x half> @canonicalize_v8f16(<8 x half> %a) nounwind {112; Z16-LABEL: canonicalize_v8f16:113; Z16:       # %bb.0:114; Z16-NEXT:    stmg %r13, %r15, 104(%r15)115; Z16-NEXT:    aghi %r15, -224116; Z16-NEXT:    std %f8, 216(%r15) # 8-byte Spill117; Z16-NEXT:    std %f9, 208(%r15) # 8-byte Spill118; Z16-NEXT:    std %f10, 200(%r15) # 8-byte Spill119; Z16-NEXT:    std %f11, 192(%r15) # 8-byte Spill120; Z16-NEXT:    std %f12, 184(%r15) # 8-byte Spill121; Z16-NEXT:    std %f13, 176(%r15) # 8-byte Spill122; Z16-NEXT:    std %f14, 168(%r15) # 8-byte Spill123; Z16-NEXT:    std %f15, 160(%r15) # 8-byte Spill124; Z16-NEXT:    vlreph %v11, 414(%r15)125; Z16-NEXT:    vlreph %v12, 406(%r15)126; Z16-NEXT:    vlreph %v13, 398(%r15)127; Z16-NEXT:    vlreph %v14, 390(%r15)128; Z16-NEXT:    ldr %f8, %f6129; Z16-NEXT:    ldr %f9, %f4130; Z16-NEXT:    ldr %f10, %f2131; Z16-NEXT:    lgr %r13, %r2132; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT133; Z16-NEXT:    vgmf %v1, 2, 8134; Z16-NEXT:    meebr %f0, %f1135; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT136; Z16-NEXT:    ldr %f15, %f0137; Z16-NEXT:    ldr %f0, %f10138; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT139; Z16-NEXT:    vgmf %v1, 2, 8140; Z16-NEXT:    meebr %f0, %f1141; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT142; Z16-NEXT:    ldr %f10, %f0143; Z16-NEXT:    ldr %f0, %f9144; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT145; Z16-NEXT:    vgmf %v1, 2, 8146; Z16-NEXT:    meebr %f0, %f1147; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT148; Z16-NEXT:    ldr %f9, %f0149; Z16-NEXT:    ldr %f0, %f8150; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT151; Z16-NEXT:    vgmf %v1, 2, 8152; Z16-NEXT:    meebr %f0, %f1153; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT154; Z16-NEXT:    ldr %f8, %f0155; Z16-NEXT:    ldr %f0, %f14156; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT157; Z16-NEXT:    vgmf %v1, 2, 8158; Z16-NEXT:    meebr %f0, %f1159; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT160; Z16-NEXT:    ldr %f14, %f0161; Z16-NEXT:    ldr %f0, %f13162; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT163; Z16-NEXT:    vgmf %v1, 2, 8164; Z16-NEXT:    meebr %f0, %f1165; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT166; Z16-NEXT:    ldr %f13, %f0167; Z16-NEXT:    ldr %f0, %f12168; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT169; Z16-NEXT:    vgmf %v1, 2, 8170; Z16-NEXT:    meebr %f0, %f1171; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT172; Z16-NEXT:    ldr %f12, %f0173; Z16-NEXT:    ldr %f0, %f11174; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT175; Z16-NEXT:    vgmf %v1, 2, 8176; Z16-NEXT:    meebr %f0, %f1177; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT178; Z16-NEXT:    vsteh %v0, 14(%r13), 0179; Z16-NEXT:    vsteh %v12, 12(%r13), 0180; Z16-NEXT:    vsteh %v13, 10(%r13), 0181; Z16-NEXT:    vsteh %v14, 8(%r13), 0182; Z16-NEXT:    vsteh %v8, 6(%r13), 0183; Z16-NEXT:    vsteh %v9, 4(%r13), 0184; Z16-NEXT:    vsteh %v10, 2(%r13), 0185; Z16-NEXT:    vsteh %v15, 0(%r13), 0186; Z16-NEXT:    ld %f8, 216(%r15) # 8-byte Reload187; Z16-NEXT:    ld %f9, 208(%r15) # 8-byte Reload188; Z16-NEXT:    ld %f10, 200(%r15) # 8-byte Reload189; Z16-NEXT:    ld %f11, 192(%r15) # 8-byte Reload190; Z16-NEXT:    ld %f12, 184(%r15) # 8-byte Reload191; Z16-NEXT:    ld %f13, 176(%r15) # 8-byte Reload192; Z16-NEXT:    ld %f14, 168(%r15) # 8-byte Reload193; Z16-NEXT:    ld %f15, 160(%r15) # 8-byte Reload194; Z16-NEXT:    lmg %r13, %r15, 328(%r15)195; Z16-NEXT:    br %r14196  %canonicalized = call <8 x half> @llvm.canonicalize.v8f16(<8 x half> %a)197  ret <8 x half> %canonicalized198}199define <4 x float> @canonicalize_v4f32(<4 x float> %a) {200; Z16-LABEL: canonicalize_v4f32:201; Z16:       # %bb.0:202; Z16-NEXT:    vrepf %v0, %v24, 3203; Z16-NEXT:    vgmf %v1, 2, 8204; Z16-NEXT:    vrepf %v2, %v24, 2205; Z16-NEXT:    meebr %f0, %f1206; Z16-NEXT:    meebr %f2, %f1207; Z16-NEXT:    vrepf %v3, %v24, 1208; Z16-NEXT:    vmrhf %v0, %v2, %v0209; Z16-NEXT:    wfmsb %f2, %v24, %f1210; Z16-NEXT:    wfmsb %f1, %f3, %f1211; Z16-NEXT:    vmrhf %v1, %v2, %v1212; Z16-NEXT:    vmrhg %v24, %v1, %v0213; Z16-NEXT:    br %r14214  %canonicalized = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %a)215  ret <4 x float> %canonicalized216}217 218define <4 x double> @canonicalize_v4f64(<4 x double> %a) {219; Z16-LABEL: canonicalize_v4f64:220; Z16:       # %bb.0:221; Z16-NEXT:    vgmg %v0, 2, 11222; Z16-NEXT:    vrepg %v2, %v24, 1223; Z16-NEXT:    wfmdb %f1, %v24, %f0224; Z16-NEXT:    mdbr %f2, %f0225; Z16-NEXT:    vmrhg %v24, %v1, %v2226; Z16-NEXT:    vrepg %v2, %v26, 1227; Z16-NEXT:    wfmdb %f1, %v26, %f0228; Z16-NEXT:    wfmdb %f0, %f2, %f0229; Z16-NEXT:    vmrhg %v26, %v1, %v0230; Z16-NEXT:    br %r14231  %canonicalized = call <4 x double> @llvm.canonicalize.v4f64(<4 x double> %a)232  ret <4 x double> %canonicalized233}234 235define <2 x fp128> @canonicalize_v2f128(<2 x fp128> %a) {236; Z16-LABEL: canonicalize_v2f128:237; Z16:       # %bb.0:238; Z16-NEXT:    larl %r1, .LCPI11_0239; Z16-NEXT:    vl %v0, 16(%r3), 3240; Z16-NEXT:    vl %v1, 0(%r3), 3241; Z16-NEXT:    vl %v2, 0(%r1), 3242; Z16-NEXT:    wfmxb %v1, %v1, %v2243; Z16-NEXT:    wfmxb %v0, %v0, %v2244; Z16-NEXT:    vst %v0, 16(%r2), 4245; Z16-NEXT:    vst %v1, 0(%r2), 4246; Z16-NEXT:    br %r14247  %canonicalized = call <2 x fp128> @llvm.canonicalize.v2f128(<2 x fp128> %a)248  ret <2 x fp128> %canonicalized249}250 251define void @canonicalize_ptr_v8f16(ptr %out) nounwind {252; Z16-LABEL: canonicalize_ptr_v8f16:253; Z16:       # %bb.0:254; Z16-NEXT:    stmg %r13, %r15, 104(%r15)255; Z16-NEXT:    aghi %r15, -224256; Z16-NEXT:    std %f8, 216(%r15) # 8-byte Spill257; Z16-NEXT:    std %f9, 208(%r15) # 8-byte Spill258; Z16-NEXT:    std %f10, 200(%r15) # 8-byte Spill259; Z16-NEXT:    std %f11, 192(%r15) # 8-byte Spill260; Z16-NEXT:    std %f12, 184(%r15) # 8-byte Spill261; Z16-NEXT:    std %f13, 176(%r15) # 8-byte Spill262; Z16-NEXT:    std %f14, 168(%r15) # 8-byte Spill263; Z16-NEXT:    std %f15, 160(%r15) # 8-byte Spill264; Z16-NEXT:    vlreph %v0, 0(%r2)265; Z16-NEXT:    vlreph %v8, 14(%r2)266; Z16-NEXT:    vlreph %v9, 12(%r2)267; Z16-NEXT:    vlreph %v10, 10(%r2)268; Z16-NEXT:    lgr %r13, %r2269; Z16-NEXT:    vlreph %v11, 8(%r2)270; Z16-NEXT:    vlreph %v12, 6(%r2)271; Z16-NEXT:    vlreph %v13, 4(%r2)272; Z16-NEXT:    vlreph %v14, 2(%r2)273; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT274; Z16-NEXT:    vgmf %v1, 2, 8275; Z16-NEXT:    meebr %f0, %f1276; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT277; Z16-NEXT:    ldr %f15, %f0278; Z16-NEXT:    ldr %f0, %f14279; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT280; Z16-NEXT:    vgmf %v1, 2, 8281; Z16-NEXT:    meebr %f0, %f1282; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT283; Z16-NEXT:    ldr %f14, %f0284; Z16-NEXT:    ldr %f0, %f13285; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT286; Z16-NEXT:    vgmf %v1, 2, 8287; Z16-NEXT:    meebr %f0, %f1288; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT289; Z16-NEXT:    ldr %f13, %f0290; Z16-NEXT:    ldr %f0, %f12291; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT292; Z16-NEXT:    vgmf %v1, 2, 8293; Z16-NEXT:    meebr %f0, %f1294; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT295; Z16-NEXT:    ldr %f12, %f0296; Z16-NEXT:    ldr %f0, %f11297; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT298; Z16-NEXT:    vgmf %v1, 2, 8299; Z16-NEXT:    meebr %f0, %f1300; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT301; Z16-NEXT:    ldr %f11, %f0302; Z16-NEXT:    ldr %f0, %f10303; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT304; Z16-NEXT:    vgmf %v1, 2, 8305; Z16-NEXT:    meebr %f0, %f1306; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT307; Z16-NEXT:    ldr %f10, %f0308; Z16-NEXT:    ldr %f0, %f9309; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT310; Z16-NEXT:    vgmf %v1, 2, 8311; Z16-NEXT:    meebr %f0, %f1312; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT313; Z16-NEXT:    ldr %f9, %f0314; Z16-NEXT:    ldr %f0, %f8315; Z16-NEXT:    brasl %r14, __extendhfsf2@PLT316; Z16-NEXT:    vgmf %v1, 2, 8317; Z16-NEXT:    meebr %f0, %f1318; Z16-NEXT:    brasl %r14, __truncsfhf2@PLT319; Z16-NEXT:    vsteh %v9, 12(%r13), 0320; Z16-NEXT:    vsteh %v10, 10(%r13), 0321; Z16-NEXT:    vsteh %v11, 8(%r13), 0322; Z16-NEXT:    vsteh %v12, 6(%r13), 0323; Z16-NEXT:    vsteh %v13, 4(%r13), 0324; Z16-NEXT:    vsteh %v14, 2(%r13), 0325; Z16-NEXT:    vsteh %v15, 0(%r13), 0326; Z16-NEXT:    ld %f8, 216(%r15) # 8-byte Reload327; Z16-NEXT:    ld %f9, 208(%r15) # 8-byte Reload328; Z16-NEXT:    ld %f10, 200(%r15) # 8-byte Reload329; Z16-NEXT:    ld %f11, 192(%r15) # 8-byte Reload330; Z16-NEXT:    ld %f12, 184(%r15) # 8-byte Reload331; Z16-NEXT:    ld %f13, 176(%r15) # 8-byte Reload332; Z16-NEXT:    ld %f14, 168(%r15) # 8-byte Reload333; Z16-NEXT:    ld %f15, 160(%r15) # 8-byte Reload334; Z16-NEXT:    vsteh %v0, 14(%r13), 0335; Z16-NEXT:    lmg %r13, %r15, 328(%r15)336; Z16-NEXT:    br %r14337  %val = load <8 x half>, ptr %out338  %canonicalized = call <8 x half> @llvm.canonicalize.v8f16(<8 x half> %val)339  store <8 x half> %canonicalized, ptr %out340  ret void341}342 343define void @canonicalize_ptr_v4f32(ptr %out) {344; Z16-LABEL: canonicalize_ptr_v4f32:345; Z16:       # %bb.0:346; Z16-NEXT:    vl %v0, 0(%r2), 3347; Z16-NEXT:    vrepf %v1, %v0, 3348; Z16-NEXT:    vgmf %v2, 2, 8349; Z16-NEXT:    vrepf %v3, %v0, 2350; Z16-NEXT:    meebr %f1, %f2351; Z16-NEXT:    meebr %f3, %f2352; Z16-NEXT:    vmrhf %v1, %v3, %v1353; Z16-NEXT:    wfmsb %f3, %f0, %f2354; Z16-NEXT:    vrepf %v0, %v0, 1355; Z16-NEXT:    meebr %f0, %f2356; Z16-NEXT:    vmrhf %v0, %v3, %v0357; Z16-NEXT:    vmrhg %v0, %v0, %v1358; Z16-NEXT:    vst %v0, 0(%r2), 3359; Z16-NEXT:    br %r14360  %val = load <4 x float>, ptr %out361  %canonicalized = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %val)362  store <4 x float> %canonicalized, ptr %out363  ret void364}365 366define void @canonicalize_ptr_v4f64(ptr %out) {367; Z16-LABEL: canonicalize_ptr_v4f64:368; Z16:       # %bb.0:369; Z16-NEXT:    vl %v1, 16(%r2), 4370; Z16-NEXT:    vgmg %v2, 2, 11371; Z16-NEXT:    wfmdb %f3, %f1, %f2372; Z16-NEXT:    vrepg %v1, %v1, 1373; Z16-NEXT:    mdbr %f1, %f2374; Z16-NEXT:    vl %v0, 0(%r2), 4375; Z16-NEXT:    vmrhg %v1, %v3, %v1376; Z16-NEXT:    wfmdb %f3, %f0, %f2377; Z16-NEXT:    vrepg %v0, %v0, 1378; Z16-NEXT:    mdbr %f0, %f2379; Z16-NEXT:    vmrhg %v0, %v3, %v0380; Z16-NEXT:    vst %v0, 0(%r2), 4381; Z16-NEXT:    vst %v1, 16(%r2), 4382; Z16-NEXT:    br %r14383  %val = load <4 x double>, ptr %out384  %canonicalized = call <4 x double> @llvm.canonicalize.v4f64(<4 x double> %val)385  store <4 x double> %canonicalized, ptr %out386  ret void387}388 389define void @canonicalize_ptr_v2f128(ptr %out) {390; Z16-LABEL: canonicalize_ptr_v2f128:391; Z16:       # %bb.0:392; Z16-NEXT:    larl %r1, .LCPI15_0393; Z16-NEXT:    vl %v0, 16(%r2), 4394; Z16-NEXT:    vl %v1, 0(%r2), 4395; Z16-NEXT:    vl %v2, 0(%r1), 3396; Z16-NEXT:    wfmxb %v1, %v1, %v2397; Z16-NEXT:    wfmxb %v0, %v0, %v2398; Z16-NEXT:    vst %v0, 16(%r2), 4399; Z16-NEXT:    vst %v1, 0(%r2), 4400; Z16-NEXT:    br %r14401  %val = load <2 x fp128>, ptr %out402  %canonicalized = call <2 x fp128> @llvm.canonicalize.v2f128(<2 x fp128> %val)403  store <2 x fp128> %canonicalized, ptr %out404  ret void405}406