brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.0 KiB · 986666e Raw
795 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-unknown-unknown | FileCheck %s --check-prefixes=CHECK,DEFAULT3; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-unknown-unknown -mattr=+sve | FileCheck %s --check-prefixes=CHECK,SVE-OR-SME4; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s --check-prefixes=CHECK,SVE-OR-SME5; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefixes=CHECK,STREAMING-COMPAT6 7target triple = "aarch64-unknown-linux-gnu"8 9@result = dso_local global i32 0, align 410 11define dso_local i32 @skip(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="skip" {12; CHECK-LABEL: skip:13; CHECK:       // %bb.0: // %entry14; CHECK-NEXT:    mul w8, w1, w015; CHECK-NEXT:    orr w0, w8, w216; CHECK-NEXT:    ret17 18entry:19  %mul = mul nsw i32 %b, %a20  %or = or i32 %mul, %c21  ret i32 %or22}23 24define dso_local i32 @used_gpr_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr-arg" {25; CHECK-LABEL: used_gpr_arg:26; CHECK:       // %bb.0: // %entry27; CHECK-NEXT:    mul w8, w1, w028; CHECK-NEXT:    orr w0, w8, w229; CHECK-NEXT:    mov x1, #0 // =0x030; CHECK-NEXT:    mov x2, #0 // =0x031; CHECK-NEXT:    ret32 33entry:34  %mul = mul nsw i32 %b, %a35  %or = or i32 %mul, %c36  ret i32 %or37}38 39define dso_local i32 @used_gpr(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr" {40; CHECK-LABEL: used_gpr:41; CHECK:       // %bb.0: // %entry42; CHECK-NEXT:    mul w8, w1, w043; CHECK-NEXT:    orr w0, w8, w244; CHECK-NEXT:    mov x1, #0 // =0x045; CHECK-NEXT:    mov x2, #0 // =0x046; CHECK-NEXT:    mov x8, #0 // =0x047; CHECK-NEXT:    ret48 49entry:50  %mul = mul nsw i32 %b, %a51  %or = or i32 %mul, %c52  ret i32 %or53}54 55define dso_local i32 @used_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-arg" {56; CHECK-LABEL: used_arg:57; CHECK:       // %bb.0: // %entry58; CHECK-NEXT:    mul w8, w1, w059; CHECK-NEXT:    orr w0, w8, w260; CHECK-NEXT:    mov x1, #0 // =0x061; CHECK-NEXT:    mov x2, #0 // =0x062; CHECK-NEXT:    ret63 64entry:65  %mul = mul nsw i32 %b, %a66  %or = or i32 %mul, %c67  ret i32 %or68}69 70define dso_local i32 @used(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used" {71; CHECK-LABEL: used:72; CHECK:       // %bb.0: // %entry73; CHECK-NEXT:    mul w8, w1, w074; CHECK-NEXT:    orr w0, w8, w275; CHECK-NEXT:    mov x1, #0 // =0x076; CHECK-NEXT:    mov x2, #0 // =0x077; CHECK-NEXT:    mov x8, #0 // =0x078; CHECK-NEXT:    ret79 80entry:81  %mul = mul nsw i32 %b, %a82  %or = or i32 %mul, %c83  ret i32 %or84}85 86define dso_local i32 @all_gpr_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all-gpr-arg" {87; CHECK-LABEL: all_gpr_arg:88; CHECK:       // %bb.0: // %entry89; CHECK-NEXT:    mul w8, w1, w090; CHECK-NEXT:    mov x1, #0 // =0x091; CHECK-NEXT:    mov x3, #0 // =0x092; CHECK-NEXT:    mov x4, #0 // =0x093; CHECK-NEXT:    mov x5, #0 // =0x094; CHECK-NEXT:    mov x6, #0 // =0x095; CHECK-NEXT:    mov x7, #0 // =0x096; CHECK-NEXT:    mov x15, #0 // =0x097; CHECK-NEXT:    orr w0, w8, w298; CHECK-NEXT:    mov x2, #0 // =0x099; CHECK-NEXT:    mov x8, #0 // =0x0100; CHECK-NEXT:    ret101 102entry:103  %mul = mul nsw i32 %b, %a104  %or = or i32 %mul, %c105  ret i32 %or106}107 108define dso_local i32 @all_gpr(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all-gpr" {109; CHECK-LABEL: all_gpr:110; CHECK:       // %bb.0: // %entry111; CHECK-NEXT:    mul w8, w1, w0112; CHECK-NEXT:    mov x1, #0 // =0x0113; CHECK-NEXT:    mov x3, #0 // =0x0114; CHECK-NEXT:    mov x4, #0 // =0x0115; CHECK-NEXT:    mov x5, #0 // =0x0116; CHECK-NEXT:    mov x6, #0 // =0x0117; CHECK-NEXT:    mov x7, #0 // =0x0118; CHECK-NEXT:    mov x9, #0 // =0x0119; CHECK-NEXT:    mov x10, #0 // =0x0120; CHECK-NEXT:    orr w0, w8, w2121; CHECK-NEXT:    mov x2, #0 // =0x0122; CHECK-NEXT:    mov x8, #0 // =0x0123; CHECK-NEXT:    mov x11, #0 // =0x0124; CHECK-NEXT:    mov x12, #0 // =0x0125; CHECK-NEXT:    mov x13, #0 // =0x0126; CHECK-NEXT:    mov x14, #0 // =0x0127; CHECK-NEXT:    mov x15, #0 // =0x0128; CHECK-NEXT:    mov x16, #0 // =0x0129; CHECK-NEXT:    mov x17, #0 // =0x0130; CHECK-NEXT:    mov x18, #0 // =0x0131; CHECK-NEXT:    ret132 133entry:134  %mul = mul nsw i32 %b, %a135  %or = or i32 %mul, %c136  ret i32 %or137}138 139define dso_local i32 @all_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all-arg" {140; DEFAULT-LABEL: all_arg:141; DEFAULT:       // %bb.0: // %entry142; DEFAULT-NEXT:    mul w8, w1, w0143; DEFAULT-NEXT:    mov x1, #0 // =0x0144; DEFAULT-NEXT:    mov x3, #0 // =0x0145; DEFAULT-NEXT:    mov x4, #0 // =0x0146; DEFAULT-NEXT:    mov x5, #0 // =0x0147; DEFAULT-NEXT:    mov x6, #0 // =0x0148; DEFAULT-NEXT:    mov x7, #0 // =0x0149; DEFAULT-NEXT:    mov x15, #0 // =0x0150; DEFAULT-NEXT:    movi v0.2d, #0000000000000000151; DEFAULT-NEXT:    orr w0, w8, w2152; DEFAULT-NEXT:    mov x2, #0 // =0x0153; DEFAULT-NEXT:    mov x8, #0 // =0x0154; DEFAULT-NEXT:    movi v1.2d, #0000000000000000155; DEFAULT-NEXT:    movi v2.2d, #0000000000000000156; DEFAULT-NEXT:    movi v3.2d, #0000000000000000157; DEFAULT-NEXT:    movi v4.2d, #0000000000000000158; DEFAULT-NEXT:    movi v5.2d, #0000000000000000159; DEFAULT-NEXT:    movi v6.2d, #0000000000000000160; DEFAULT-NEXT:    movi v7.2d, #0000000000000000161; DEFAULT-NEXT:    ret162;163; SVE-OR-SME-LABEL: all_arg:164; SVE-OR-SME:       // %bb.0: // %entry165; SVE-OR-SME-NEXT:    mul w8, w1, w0166; SVE-OR-SME-NEXT:    mov x1, #0 // =0x0167; SVE-OR-SME-NEXT:    mov x3, #0 // =0x0168; SVE-OR-SME-NEXT:    mov x4, #0 // =0x0169; SVE-OR-SME-NEXT:    mov x5, #0 // =0x0170; SVE-OR-SME-NEXT:    mov x6, #0 // =0x0171; SVE-OR-SME-NEXT:    mov x7, #0 // =0x0172; SVE-OR-SME-NEXT:    mov x15, #0 // =0x0173; SVE-OR-SME-NEXT:    mov z0.d, #0 // =0x0174; SVE-OR-SME-NEXT:    orr w0, w8, w2175; SVE-OR-SME-NEXT:    mov x2, #0 // =0x0176; SVE-OR-SME-NEXT:    mov x8, #0 // =0x0177; SVE-OR-SME-NEXT:    mov z1.d, #0 // =0x0178; SVE-OR-SME-NEXT:    mov z2.d, #0 // =0x0179; SVE-OR-SME-NEXT:    mov z3.d, #0 // =0x0180; SVE-OR-SME-NEXT:    mov z4.d, #0 // =0x0181; SVE-OR-SME-NEXT:    mov z5.d, #0 // =0x0182; SVE-OR-SME-NEXT:    mov z6.d, #0 // =0x0183; SVE-OR-SME-NEXT:    mov z7.d, #0 // =0x0184; SVE-OR-SME-NEXT:    pfalse p0.b185; SVE-OR-SME-NEXT:    pfalse p1.b186; SVE-OR-SME-NEXT:    pfalse p2.b187; SVE-OR-SME-NEXT:    pfalse p3.b188; SVE-OR-SME-NEXT:    ret189;190; STREAMING-COMPAT-LABEL: all_arg:191; STREAMING-COMPAT:       // %bb.0: // %entry192; STREAMING-COMPAT-NEXT:    mul w8, w1, w0193; STREAMING-COMPAT-NEXT:    mov x1, #0 // =0x0194; STREAMING-COMPAT-NEXT:    mov x3, #0 // =0x0195; STREAMING-COMPAT-NEXT:    mov x4, #0 // =0x0196; STREAMING-COMPAT-NEXT:    mov x5, #0 // =0x0197; STREAMING-COMPAT-NEXT:    mov x6, #0 // =0x0198; STREAMING-COMPAT-NEXT:    mov x7, #0 // =0x0199; STREAMING-COMPAT-NEXT:    mov x15, #0 // =0x0200; STREAMING-COMPAT-NEXT:    fmov d0, xzr201; STREAMING-COMPAT-NEXT:    orr w0, w8, w2202; STREAMING-COMPAT-NEXT:    mov x2, #0 // =0x0203; STREAMING-COMPAT-NEXT:    mov x8, #0 // =0x0204; STREAMING-COMPAT-NEXT:    fmov d1, xzr205; STREAMING-COMPAT-NEXT:    fmov d2, xzr206; STREAMING-COMPAT-NEXT:    fmov d3, xzr207; STREAMING-COMPAT-NEXT:    fmov d4, xzr208; STREAMING-COMPAT-NEXT:    fmov d5, xzr209; STREAMING-COMPAT-NEXT:    fmov d6, xzr210; STREAMING-COMPAT-NEXT:    fmov d7, xzr211; STREAMING-COMPAT-NEXT:    ret212 213entry:214  %mul = mul nsw i32 %b, %a215  %or = or i32 %mul, %c216  ret i32 %or217}218 219define dso_local i32 @all(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all" {220; DEFAULT-LABEL: all:221; DEFAULT:       // %bb.0: // %entry222; DEFAULT-NEXT:    mul w8, w1, w0223; DEFAULT-NEXT:    mov x1, #0 // =0x0224; DEFAULT-NEXT:    mov x3, #0 // =0x0225; DEFAULT-NEXT:    mov x4, #0 // =0x0226; DEFAULT-NEXT:    mov x5, #0 // =0x0227; DEFAULT-NEXT:    mov x6, #0 // =0x0228; DEFAULT-NEXT:    mov x7, #0 // =0x0229; DEFAULT-NEXT:    mov x9, #0 // =0x0230; DEFAULT-NEXT:    mov x10, #0 // =0x0231; DEFAULT-NEXT:    orr w0, w8, w2232; DEFAULT-NEXT:    mov x2, #0 // =0x0233; DEFAULT-NEXT:    mov x8, #0 // =0x0234; DEFAULT-NEXT:    mov x11, #0 // =0x0235; DEFAULT-NEXT:    mov x12, #0 // =0x0236; DEFAULT-NEXT:    mov x13, #0 // =0x0237; DEFAULT-NEXT:    mov x14, #0 // =0x0238; DEFAULT-NEXT:    mov x15, #0 // =0x0239; DEFAULT-NEXT:    mov x16, #0 // =0x0240; DEFAULT-NEXT:    mov x17, #0 // =0x0241; DEFAULT-NEXT:    mov x18, #0 // =0x0242; DEFAULT-NEXT:    movi v0.2d, #0000000000000000243; DEFAULT-NEXT:    movi v1.2d, #0000000000000000244; DEFAULT-NEXT:    movi v2.2d, #0000000000000000245; DEFAULT-NEXT:    movi v3.2d, #0000000000000000246; DEFAULT-NEXT:    movi v4.2d, #0000000000000000247; DEFAULT-NEXT:    movi v5.2d, #0000000000000000248; DEFAULT-NEXT:    movi v6.2d, #0000000000000000249; DEFAULT-NEXT:    movi v7.2d, #0000000000000000250; DEFAULT-NEXT:    movi v16.2d, #0000000000000000251; DEFAULT-NEXT:    movi v17.2d, #0000000000000000252; DEFAULT-NEXT:    movi v18.2d, #0000000000000000253; DEFAULT-NEXT:    movi v19.2d, #0000000000000000254; DEFAULT-NEXT:    movi v20.2d, #0000000000000000255; DEFAULT-NEXT:    movi v21.2d, #0000000000000000256; DEFAULT-NEXT:    movi v22.2d, #0000000000000000257; DEFAULT-NEXT:    movi v23.2d, #0000000000000000258; DEFAULT-NEXT:    movi v24.2d, #0000000000000000259; DEFAULT-NEXT:    movi v25.2d, #0000000000000000260; DEFAULT-NEXT:    movi v26.2d, #0000000000000000261; DEFAULT-NEXT:    movi v27.2d, #0000000000000000262; DEFAULT-NEXT:    movi v28.2d, #0000000000000000263; DEFAULT-NEXT:    movi v29.2d, #0000000000000000264; DEFAULT-NEXT:    movi v30.2d, #0000000000000000265; DEFAULT-NEXT:    movi v31.2d, #0000000000000000266; DEFAULT-NEXT:    ret267;268; SVE-OR-SME-LABEL: all:269; SVE-OR-SME:       // %bb.0: // %entry270; SVE-OR-SME-NEXT:    mul w8, w1, w0271; SVE-OR-SME-NEXT:    mov x1, #0 // =0x0272; SVE-OR-SME-NEXT:    mov x3, #0 // =0x0273; SVE-OR-SME-NEXT:    mov x4, #0 // =0x0274; SVE-OR-SME-NEXT:    mov x5, #0 // =0x0275; SVE-OR-SME-NEXT:    mov x6, #0 // =0x0276; SVE-OR-SME-NEXT:    mov x7, #0 // =0x0277; SVE-OR-SME-NEXT:    mov x9, #0 // =0x0278; SVE-OR-SME-NEXT:    mov x10, #0 // =0x0279; SVE-OR-SME-NEXT:    orr w0, w8, w2280; SVE-OR-SME-NEXT:    mov x2, #0 // =0x0281; SVE-OR-SME-NEXT:    mov x8, #0 // =0x0282; SVE-OR-SME-NEXT:    mov x11, #0 // =0x0283; SVE-OR-SME-NEXT:    mov x12, #0 // =0x0284; SVE-OR-SME-NEXT:    mov x13, #0 // =0x0285; SVE-OR-SME-NEXT:    mov x14, #0 // =0x0286; SVE-OR-SME-NEXT:    mov x15, #0 // =0x0287; SVE-OR-SME-NEXT:    mov x16, #0 // =0x0288; SVE-OR-SME-NEXT:    mov x17, #0 // =0x0289; SVE-OR-SME-NEXT:    mov x18, #0 // =0x0290; SVE-OR-SME-NEXT:    mov z0.d, #0 // =0x0291; SVE-OR-SME-NEXT:    mov z1.d, #0 // =0x0292; SVE-OR-SME-NEXT:    mov z2.d, #0 // =0x0293; SVE-OR-SME-NEXT:    mov z3.d, #0 // =0x0294; SVE-OR-SME-NEXT:    mov z4.d, #0 // =0x0295; SVE-OR-SME-NEXT:    mov z5.d, #0 // =0x0296; SVE-OR-SME-NEXT:    mov z6.d, #0 // =0x0297; SVE-OR-SME-NEXT:    mov z7.d, #0 // =0x0298; SVE-OR-SME-NEXT:    mov z16.d, #0 // =0x0299; SVE-OR-SME-NEXT:    mov z17.d, #0 // =0x0300; SVE-OR-SME-NEXT:    mov z18.d, #0 // =0x0301; SVE-OR-SME-NEXT:    mov z19.d, #0 // =0x0302; SVE-OR-SME-NEXT:    mov z20.d, #0 // =0x0303; SVE-OR-SME-NEXT:    mov z21.d, #0 // =0x0304; SVE-OR-SME-NEXT:    mov z22.d, #0 // =0x0305; SVE-OR-SME-NEXT:    mov z23.d, #0 // =0x0306; SVE-OR-SME-NEXT:    mov z24.d, #0 // =0x0307; SVE-OR-SME-NEXT:    mov z25.d, #0 // =0x0308; SVE-OR-SME-NEXT:    mov z26.d, #0 // =0x0309; SVE-OR-SME-NEXT:    mov z27.d, #0 // =0x0310; SVE-OR-SME-NEXT:    mov z28.d, #0 // =0x0311; SVE-OR-SME-NEXT:    mov z29.d, #0 // =0x0312; SVE-OR-SME-NEXT:    mov z30.d, #0 // =0x0313; SVE-OR-SME-NEXT:    mov z31.d, #0 // =0x0314; SVE-OR-SME-NEXT:    pfalse p0.b315; SVE-OR-SME-NEXT:    pfalse p1.b316; SVE-OR-SME-NEXT:    pfalse p2.b317; SVE-OR-SME-NEXT:    pfalse p3.b318; SVE-OR-SME-NEXT:    pfalse p4.b319; SVE-OR-SME-NEXT:    pfalse p5.b320; SVE-OR-SME-NEXT:    pfalse p6.b321; SVE-OR-SME-NEXT:    pfalse p7.b322; SVE-OR-SME-NEXT:    pfalse p8.b323; SVE-OR-SME-NEXT:    pfalse p9.b324; SVE-OR-SME-NEXT:    pfalse p10.b325; SVE-OR-SME-NEXT:    pfalse p11.b326; SVE-OR-SME-NEXT:    pfalse p12.b327; SVE-OR-SME-NEXT:    pfalse p13.b328; SVE-OR-SME-NEXT:    pfalse p14.b329; SVE-OR-SME-NEXT:    pfalse p15.b330; SVE-OR-SME-NEXT:    ret331;332; STREAMING-COMPAT-LABEL: all:333; STREAMING-COMPAT:       // %bb.0: // %entry334; STREAMING-COMPAT-NEXT:    mul w8, w1, w0335; STREAMING-COMPAT-NEXT:    mov x1, #0 // =0x0336; STREAMING-COMPAT-NEXT:    mov x3, #0 // =0x0337; STREAMING-COMPAT-NEXT:    mov x4, #0 // =0x0338; STREAMING-COMPAT-NEXT:    mov x5, #0 // =0x0339; STREAMING-COMPAT-NEXT:    mov x6, #0 // =0x0340; STREAMING-COMPAT-NEXT:    mov x7, #0 // =0x0341; STREAMING-COMPAT-NEXT:    mov x9, #0 // =0x0342; STREAMING-COMPAT-NEXT:    mov x10, #0 // =0x0343; STREAMING-COMPAT-NEXT:    orr w0, w8, w2344; STREAMING-COMPAT-NEXT:    mov x2, #0 // =0x0345; STREAMING-COMPAT-NEXT:    mov x8, #0 // =0x0346; STREAMING-COMPAT-NEXT:    mov x11, #0 // =0x0347; STREAMING-COMPAT-NEXT:    mov x12, #0 // =0x0348; STREAMING-COMPAT-NEXT:    mov x13, #0 // =0x0349; STREAMING-COMPAT-NEXT:    mov x14, #0 // =0x0350; STREAMING-COMPAT-NEXT:    mov x15, #0 // =0x0351; STREAMING-COMPAT-NEXT:    mov x16, #0 // =0x0352; STREAMING-COMPAT-NEXT:    mov x17, #0 // =0x0353; STREAMING-COMPAT-NEXT:    mov x18, #0 // =0x0354; STREAMING-COMPAT-NEXT:    fmov d0, xzr355; STREAMING-COMPAT-NEXT:    fmov d1, xzr356; STREAMING-COMPAT-NEXT:    fmov d2, xzr357; STREAMING-COMPAT-NEXT:    fmov d3, xzr358; STREAMING-COMPAT-NEXT:    fmov d4, xzr359; STREAMING-COMPAT-NEXT:    fmov d5, xzr360; STREAMING-COMPAT-NEXT:    fmov d6, xzr361; STREAMING-COMPAT-NEXT:    fmov d7, xzr362; STREAMING-COMPAT-NEXT:    fmov d16, xzr363; STREAMING-COMPAT-NEXT:    fmov d17, xzr364; STREAMING-COMPAT-NEXT:    fmov d18, xzr365; STREAMING-COMPAT-NEXT:    fmov d19, xzr366; STREAMING-COMPAT-NEXT:    fmov d20, xzr367; STREAMING-COMPAT-NEXT:    fmov d21, xzr368; STREAMING-COMPAT-NEXT:    fmov d22, xzr369; STREAMING-COMPAT-NEXT:    fmov d23, xzr370; STREAMING-COMPAT-NEXT:    fmov d24, xzr371; STREAMING-COMPAT-NEXT:    fmov d25, xzr372; STREAMING-COMPAT-NEXT:    fmov d26, xzr373; STREAMING-COMPAT-NEXT:    fmov d27, xzr374; STREAMING-COMPAT-NEXT:    fmov d28, xzr375; STREAMING-COMPAT-NEXT:    fmov d29, xzr376; STREAMING-COMPAT-NEXT:    fmov d30, xzr377; STREAMING-COMPAT-NEXT:    fmov d31, xzr378; STREAMING-COMPAT-NEXT:    ret379 380entry:381  %mul = mul nsw i32 %b, %a382  %or = or i32 %mul, %c383  ret i32 %or384}385 386define dso_local double @skip_float(double noundef %a, float noundef %b) local_unnamed_addr #0 "zero-call-used-regs"="skip" {387; CHECK-LABEL: skip_float:388; CHECK:       // %bb.0: // %entry389; CHECK-NEXT:    fcvt d1, s1390; CHECK-NEXT:    fmul d0, d1, d0391; CHECK-NEXT:    ret392 393entry:394  %conv = fpext float %b to double395  %mul = fmul double %conv, %a396  ret double %mul397}398 399define dso_local double @used_gpr_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr-arg" {400; CHECK-LABEL: used_gpr_arg_float:401; CHECK:       // %bb.0: // %entry402; CHECK-NEXT:    fcvt d1, s1403; CHECK-NEXT:    fmul d0, d1, d0404; CHECK-NEXT:    ret405 406entry:407  %conv = fpext float %b to double408  %mul = fmul double %conv, %a409  ret double %mul410}411 412define dso_local double @used_gpr_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr" {413; CHECK-LABEL: used_gpr_float:414; CHECK:       // %bb.0: // %entry415; CHECK-NEXT:    fcvt d1, s1416; CHECK-NEXT:    fmul d0, d1, d0417; CHECK-NEXT:    ret418 419entry:420  %conv = fpext float %b to double421  %mul = fmul double %conv, %a422  ret double %mul423}424 425define dso_local double @used_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-arg" {426; DEFAULT-LABEL: used_arg_float:427; DEFAULT:       // %bb.0: // %entry428; DEFAULT-NEXT:    fcvt d1, s1429; DEFAULT-NEXT:    fmul d0, d1, d0430; DEFAULT-NEXT:    movi v1.2d, #0000000000000000431; DEFAULT-NEXT:    ret432;433; SVE-OR-SME-LABEL: used_arg_float:434; SVE-OR-SME:       // %bb.0: // %entry435; SVE-OR-SME-NEXT:    fcvt d1, s1436; SVE-OR-SME-NEXT:    fmul d0, d1, d0437; SVE-OR-SME-NEXT:    mov z1.d, #0 // =0x0438; SVE-OR-SME-NEXT:    ret439;440; STREAMING-COMPAT-LABEL: used_arg_float:441; STREAMING-COMPAT:       // %bb.0: // %entry442; STREAMING-COMPAT-NEXT:    fcvt d1, s1443; STREAMING-COMPAT-NEXT:    fmul d0, d1, d0444; STREAMING-COMPAT-NEXT:    fmov d1, xzr445; STREAMING-COMPAT-NEXT:    ret446 447entry:448  %conv = fpext float %b to double449  %mul = fmul double %conv, %a450  ret double %mul451}452 453define dso_local double @used_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used" {454; DEFAULT-LABEL: used_float:455; DEFAULT:       // %bb.0: // %entry456; DEFAULT-NEXT:    fcvt d1, s1457; DEFAULT-NEXT:    fmul d0, d1, d0458; DEFAULT-NEXT:    movi v1.2d, #0000000000000000459; DEFAULT-NEXT:    ret460;461; SVE-OR-SME-LABEL: used_float:462; SVE-OR-SME:       // %bb.0: // %entry463; SVE-OR-SME-NEXT:    fcvt d1, s1464; SVE-OR-SME-NEXT:    fmul d0, d1, d0465; SVE-OR-SME-NEXT:    mov z1.d, #0 // =0x0466; SVE-OR-SME-NEXT:    ret467;468; STREAMING-COMPAT-LABEL: used_float:469; STREAMING-COMPAT:       // %bb.0: // %entry470; STREAMING-COMPAT-NEXT:    fcvt d1, s1471; STREAMING-COMPAT-NEXT:    fmul d0, d1, d0472; STREAMING-COMPAT-NEXT:    fmov d1, xzr473; STREAMING-COMPAT-NEXT:    ret474 475entry:476  %conv = fpext float %b to double477  %mul = fmul double %conv, %a478  ret double %mul479}480 481define dso_local double @all_gpr_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all-gpr-arg" {482; CHECK-LABEL: all_gpr_arg_float:483; CHECK:       // %bb.0: // %entry484; CHECK-NEXT:    fcvt d1, s1485; CHECK-NEXT:    fmul d0, d1, d0486; CHECK-NEXT:    mov x0, #0 // =0x0487; CHECK-NEXT:    mov x1, #0 // =0x0488; CHECK-NEXT:    mov x2, #0 // =0x0489; CHECK-NEXT:    mov x3, #0 // =0x0490; CHECK-NEXT:    mov x4, #0 // =0x0491; CHECK-NEXT:    mov x5, #0 // =0x0492; CHECK-NEXT:    mov x6, #0 // =0x0493; CHECK-NEXT:    mov x7, #0 // =0x0494; CHECK-NEXT:    mov x8, #0 // =0x0495; CHECK-NEXT:    mov x15, #0 // =0x0496; CHECK-NEXT:    ret497 498entry:499  %conv = fpext float %b to double500  %mul = fmul double %conv, %a501  ret double %mul502}503 504define dso_local double @all_gpr_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all-gpr" {505; CHECK-LABEL: all_gpr_float:506; CHECK:       // %bb.0: // %entry507; CHECK-NEXT:    fcvt d1, s1508; CHECK-NEXT:    fmul d0, d1, d0509; CHECK-NEXT:    mov x0, #0 // =0x0510; CHECK-NEXT:    mov x1, #0 // =0x0511; CHECK-NEXT:    mov x2, #0 // =0x0512; CHECK-NEXT:    mov x3, #0 // =0x0513; CHECK-NEXT:    mov x4, #0 // =0x0514; CHECK-NEXT:    mov x5, #0 // =0x0515; CHECK-NEXT:    mov x6, #0 // =0x0516; CHECK-NEXT:    mov x7, #0 // =0x0517; CHECK-NEXT:    mov x8, #0 // =0x0518; CHECK-NEXT:    mov x9, #0 // =0x0519; CHECK-NEXT:    mov x10, #0 // =0x0520; CHECK-NEXT:    mov x11, #0 // =0x0521; CHECK-NEXT:    mov x12, #0 // =0x0522; CHECK-NEXT:    mov x13, #0 // =0x0523; CHECK-NEXT:    mov x14, #0 // =0x0524; CHECK-NEXT:    mov x15, #0 // =0x0525; CHECK-NEXT:    mov x16, #0 // =0x0526; CHECK-NEXT:    mov x17, #0 // =0x0527; CHECK-NEXT:    mov x18, #0 // =0x0528; CHECK-NEXT:    ret529 530entry:531  %conv = fpext float %b to double532  %mul = fmul double %conv, %a533  ret double %mul534}535 536define dso_local double @all_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all-arg" {537; DEFAULT-LABEL: all_arg_float:538; DEFAULT:       // %bb.0: // %entry539; DEFAULT-NEXT:    fcvt d1, s1540; DEFAULT-NEXT:    fmul d0, d1, d0541; DEFAULT-NEXT:    mov x0, #0 // =0x0542; DEFAULT-NEXT:    mov x1, #0 // =0x0543; DEFAULT-NEXT:    mov x2, #0 // =0x0544; DEFAULT-NEXT:    mov x3, #0 // =0x0545; DEFAULT-NEXT:    mov x4, #0 // =0x0546; DEFAULT-NEXT:    mov x5, #0 // =0x0547; DEFAULT-NEXT:    mov x6, #0 // =0x0548; DEFAULT-NEXT:    mov x7, #0 // =0x0549; DEFAULT-NEXT:    mov x8, #0 // =0x0550; DEFAULT-NEXT:    mov x15, #0 // =0x0551; DEFAULT-NEXT:    movi v1.2d, #0000000000000000552; DEFAULT-NEXT:    movi v2.2d, #0000000000000000553; DEFAULT-NEXT:    movi v3.2d, #0000000000000000554; DEFAULT-NEXT:    movi v4.2d, #0000000000000000555; DEFAULT-NEXT:    movi v5.2d, #0000000000000000556; DEFAULT-NEXT:    movi v6.2d, #0000000000000000557; DEFAULT-NEXT:    movi v7.2d, #0000000000000000558; DEFAULT-NEXT:    ret559;560; SVE-OR-SME-LABEL: all_arg_float:561; SVE-OR-SME:       // %bb.0: // %entry562; SVE-OR-SME-NEXT:    fcvt d1, s1563; SVE-OR-SME-NEXT:    fmul d0, d1, d0564; SVE-OR-SME-NEXT:    mov x0, #0 // =0x0565; SVE-OR-SME-NEXT:    mov x1, #0 // =0x0566; SVE-OR-SME-NEXT:    mov x2, #0 // =0x0567; SVE-OR-SME-NEXT:    mov x3, #0 // =0x0568; SVE-OR-SME-NEXT:    mov x4, #0 // =0x0569; SVE-OR-SME-NEXT:    mov x5, #0 // =0x0570; SVE-OR-SME-NEXT:    mov x6, #0 // =0x0571; SVE-OR-SME-NEXT:    mov x7, #0 // =0x0572; SVE-OR-SME-NEXT:    mov x8, #0 // =0x0573; SVE-OR-SME-NEXT:    mov x15, #0 // =0x0574; SVE-OR-SME-NEXT:    mov z1.d, #0 // =0x0575; SVE-OR-SME-NEXT:    mov z2.d, #0 // =0x0576; SVE-OR-SME-NEXT:    mov z3.d, #0 // =0x0577; SVE-OR-SME-NEXT:    mov z4.d, #0 // =0x0578; SVE-OR-SME-NEXT:    mov z5.d, #0 // =0x0579; SVE-OR-SME-NEXT:    mov z6.d, #0 // =0x0580; SVE-OR-SME-NEXT:    mov z7.d, #0 // =0x0581; SVE-OR-SME-NEXT:    pfalse p0.b582; SVE-OR-SME-NEXT:    pfalse p1.b583; SVE-OR-SME-NEXT:    pfalse p2.b584; SVE-OR-SME-NEXT:    pfalse p3.b585; SVE-OR-SME-NEXT:    ret586;587; STREAMING-COMPAT-LABEL: all_arg_float:588; STREAMING-COMPAT:       // %bb.0: // %entry589; STREAMING-COMPAT-NEXT:    fcvt d1, s1590; STREAMING-COMPAT-NEXT:    fmul d0, d1, d0591; STREAMING-COMPAT-NEXT:    mov x0, #0 // =0x0592; STREAMING-COMPAT-NEXT:    mov x1, #0 // =0x0593; STREAMING-COMPAT-NEXT:    mov x2, #0 // =0x0594; STREAMING-COMPAT-NEXT:    mov x3, #0 // =0x0595; STREAMING-COMPAT-NEXT:    mov x4, #0 // =0x0596; STREAMING-COMPAT-NEXT:    mov x5, #0 // =0x0597; STREAMING-COMPAT-NEXT:    mov x6, #0 // =0x0598; STREAMING-COMPAT-NEXT:    mov x7, #0 // =0x0599; STREAMING-COMPAT-NEXT:    mov x8, #0 // =0x0600; STREAMING-COMPAT-NEXT:    mov x15, #0 // =0x0601; STREAMING-COMPAT-NEXT:    fmov d1, xzr602; STREAMING-COMPAT-NEXT:    fmov d2, xzr603; STREAMING-COMPAT-NEXT:    fmov d3, xzr604; STREAMING-COMPAT-NEXT:    fmov d4, xzr605; STREAMING-COMPAT-NEXT:    fmov d5, xzr606; STREAMING-COMPAT-NEXT:    fmov d6, xzr607; STREAMING-COMPAT-NEXT:    fmov d7, xzr608; STREAMING-COMPAT-NEXT:    ret609 610entry:611  %conv = fpext float %b to double612  %mul = fmul double %conv, %a613  ret double %mul614}615 616define dso_local double @all_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all" {617; DEFAULT-LABEL: all_float:618; DEFAULT:       // %bb.0: // %entry619; DEFAULT-NEXT:    fcvt d1, s1620; DEFAULT-NEXT:    fmul d0, d1, d0621; DEFAULT-NEXT:    mov x0, #0 // =0x0622; DEFAULT-NEXT:    mov x1, #0 // =0x0623; DEFAULT-NEXT:    mov x2, #0 // =0x0624; DEFAULT-NEXT:    mov x3, #0 // =0x0625; DEFAULT-NEXT:    mov x4, #0 // =0x0626; DEFAULT-NEXT:    mov x5, #0 // =0x0627; DEFAULT-NEXT:    mov x6, #0 // =0x0628; DEFAULT-NEXT:    mov x7, #0 // =0x0629; DEFAULT-NEXT:    mov x8, #0 // =0x0630; DEFAULT-NEXT:    mov x9, #0 // =0x0631; DEFAULT-NEXT:    mov x10, #0 // =0x0632; DEFAULT-NEXT:    mov x11, #0 // =0x0633; DEFAULT-NEXT:    mov x12, #0 // =0x0634; DEFAULT-NEXT:    mov x13, #0 // =0x0635; DEFAULT-NEXT:    mov x14, #0 // =0x0636; DEFAULT-NEXT:    mov x15, #0 // =0x0637; DEFAULT-NEXT:    mov x16, #0 // =0x0638; DEFAULT-NEXT:    mov x17, #0 // =0x0639; DEFAULT-NEXT:    mov x18, #0 // =0x0640; DEFAULT-NEXT:    movi v1.2d, #0000000000000000641; DEFAULT-NEXT:    movi v2.2d, #0000000000000000642; DEFAULT-NEXT:    movi v3.2d, #0000000000000000643; DEFAULT-NEXT:    movi v4.2d, #0000000000000000644; DEFAULT-NEXT:    movi v5.2d, #0000000000000000645; DEFAULT-NEXT:    movi v6.2d, #0000000000000000646; DEFAULT-NEXT:    movi v7.2d, #0000000000000000647; DEFAULT-NEXT:    movi v16.2d, #0000000000000000648; DEFAULT-NEXT:    movi v17.2d, #0000000000000000649; DEFAULT-NEXT:    movi v18.2d, #0000000000000000650; DEFAULT-NEXT:    movi v19.2d, #0000000000000000651; DEFAULT-NEXT:    movi v20.2d, #0000000000000000652; DEFAULT-NEXT:    movi v21.2d, #0000000000000000653; DEFAULT-NEXT:    movi v22.2d, #0000000000000000654; DEFAULT-NEXT:    movi v23.2d, #0000000000000000655; DEFAULT-NEXT:    movi v24.2d, #0000000000000000656; DEFAULT-NEXT:    movi v25.2d, #0000000000000000657; DEFAULT-NEXT:    movi v26.2d, #0000000000000000658; DEFAULT-NEXT:    movi v27.2d, #0000000000000000659; DEFAULT-NEXT:    movi v28.2d, #0000000000000000660; DEFAULT-NEXT:    movi v29.2d, #0000000000000000661; DEFAULT-NEXT:    movi v30.2d, #0000000000000000662; DEFAULT-NEXT:    movi v31.2d, #0000000000000000663; DEFAULT-NEXT:    ret664;665; SVE-OR-SME-LABEL: all_float:666; SVE-OR-SME:       // %bb.0: // %entry667; SVE-OR-SME-NEXT:    fcvt d1, s1668; SVE-OR-SME-NEXT:    fmul d0, d1, d0669; SVE-OR-SME-NEXT:    mov x0, #0 // =0x0670; SVE-OR-SME-NEXT:    mov x1, #0 // =0x0671; SVE-OR-SME-NEXT:    mov x2, #0 // =0x0672; SVE-OR-SME-NEXT:    mov x3, #0 // =0x0673; SVE-OR-SME-NEXT:    mov x4, #0 // =0x0674; SVE-OR-SME-NEXT:    mov x5, #0 // =0x0675; SVE-OR-SME-NEXT:    mov x6, #0 // =0x0676; SVE-OR-SME-NEXT:    mov x7, #0 // =0x0677; SVE-OR-SME-NEXT:    mov x8, #0 // =0x0678; SVE-OR-SME-NEXT:    mov x9, #0 // =0x0679; SVE-OR-SME-NEXT:    mov x10, #0 // =0x0680; SVE-OR-SME-NEXT:    mov x11, #0 // =0x0681; SVE-OR-SME-NEXT:    mov x12, #0 // =0x0682; SVE-OR-SME-NEXT:    mov x13, #0 // =0x0683; SVE-OR-SME-NEXT:    mov x14, #0 // =0x0684; SVE-OR-SME-NEXT:    mov x15, #0 // =0x0685; SVE-OR-SME-NEXT:    mov x16, #0 // =0x0686; SVE-OR-SME-NEXT:    mov x17, #0 // =0x0687; SVE-OR-SME-NEXT:    mov x18, #0 // =0x0688; SVE-OR-SME-NEXT:    mov z1.d, #0 // =0x0689; SVE-OR-SME-NEXT:    mov z2.d, #0 // =0x0690; SVE-OR-SME-NEXT:    mov z3.d, #0 // =0x0691; SVE-OR-SME-NEXT:    mov z4.d, #0 // =0x0692; SVE-OR-SME-NEXT:    mov z5.d, #0 // =0x0693; SVE-OR-SME-NEXT:    mov z6.d, #0 // =0x0694; SVE-OR-SME-NEXT:    mov z7.d, #0 // =0x0695; SVE-OR-SME-NEXT:    mov z16.d, #0 // =0x0696; SVE-OR-SME-NEXT:    mov z17.d, #0 // =0x0697; SVE-OR-SME-NEXT:    mov z18.d, #0 // =0x0698; SVE-OR-SME-NEXT:    mov z19.d, #0 // =0x0699; SVE-OR-SME-NEXT:    mov z20.d, #0 // =0x0700; SVE-OR-SME-NEXT:    mov z21.d, #0 // =0x0701; SVE-OR-SME-NEXT:    mov z22.d, #0 // =0x0702; SVE-OR-SME-NEXT:    mov z23.d, #0 // =0x0703; SVE-OR-SME-NEXT:    mov z24.d, #0 // =0x0704; SVE-OR-SME-NEXT:    mov z25.d, #0 // =0x0705; SVE-OR-SME-NEXT:    mov z26.d, #0 // =0x0706; SVE-OR-SME-NEXT:    mov z27.d, #0 // =0x0707; SVE-OR-SME-NEXT:    mov z28.d, #0 // =0x0708; SVE-OR-SME-NEXT:    mov z29.d, #0 // =0x0709; SVE-OR-SME-NEXT:    mov z30.d, #0 // =0x0710; SVE-OR-SME-NEXT:    mov z31.d, #0 // =0x0711; SVE-OR-SME-NEXT:    pfalse p0.b712; SVE-OR-SME-NEXT:    pfalse p1.b713; SVE-OR-SME-NEXT:    pfalse p2.b714; SVE-OR-SME-NEXT:    pfalse p3.b715; SVE-OR-SME-NEXT:    pfalse p4.b716; SVE-OR-SME-NEXT:    pfalse p5.b717; SVE-OR-SME-NEXT:    pfalse p6.b718; SVE-OR-SME-NEXT:    pfalse p7.b719; SVE-OR-SME-NEXT:    pfalse p8.b720; SVE-OR-SME-NEXT:    pfalse p9.b721; SVE-OR-SME-NEXT:    pfalse p10.b722; SVE-OR-SME-NEXT:    pfalse p11.b723; SVE-OR-SME-NEXT:    pfalse p12.b724; SVE-OR-SME-NEXT:    pfalse p13.b725; SVE-OR-SME-NEXT:    pfalse p14.b726; SVE-OR-SME-NEXT:    pfalse p15.b727; SVE-OR-SME-NEXT:    ret728;729; STREAMING-COMPAT-LABEL: all_float:730; STREAMING-COMPAT:       // %bb.0: // %entry731; STREAMING-COMPAT-NEXT:    fcvt d1, s1732; STREAMING-COMPAT-NEXT:    fmul d0, d1, d0733; STREAMING-COMPAT-NEXT:    mov x0, #0 // =0x0734; STREAMING-COMPAT-NEXT:    mov x1, #0 // =0x0735; STREAMING-COMPAT-NEXT:    mov x2, #0 // =0x0736; STREAMING-COMPAT-NEXT:    mov x3, #0 // =0x0737; STREAMING-COMPAT-NEXT:    mov x4, #0 // =0x0738; STREAMING-COMPAT-NEXT:    mov x5, #0 // =0x0739; STREAMING-COMPAT-NEXT:    mov x6, #0 // =0x0740; STREAMING-COMPAT-NEXT:    mov x7, #0 // =0x0741; STREAMING-COMPAT-NEXT:    mov x8, #0 // =0x0742; STREAMING-COMPAT-NEXT:    mov x9, #0 // =0x0743; STREAMING-COMPAT-NEXT:    mov x10, #0 // =0x0744; STREAMING-COMPAT-NEXT:    mov x11, #0 // =0x0745; STREAMING-COMPAT-NEXT:    mov x12, #0 // =0x0746; STREAMING-COMPAT-NEXT:    mov x13, #0 // =0x0747; STREAMING-COMPAT-NEXT:    mov x14, #0 // =0x0748; STREAMING-COMPAT-NEXT:    mov x15, #0 // =0x0749; STREAMING-COMPAT-NEXT:    mov x16, #0 // =0x0750; STREAMING-COMPAT-NEXT:    mov x17, #0 // =0x0751; STREAMING-COMPAT-NEXT:    mov x18, #0 // =0x0752; STREAMING-COMPAT-NEXT:    fmov d1, xzr753; STREAMING-COMPAT-NEXT:    fmov d2, xzr754; STREAMING-COMPAT-NEXT:    fmov d3, xzr755; STREAMING-COMPAT-NEXT:    fmov d4, xzr756; STREAMING-COMPAT-NEXT:    fmov d5, xzr757; STREAMING-COMPAT-NEXT:    fmov d6, xzr758; STREAMING-COMPAT-NEXT:    fmov d7, xzr759; STREAMING-COMPAT-NEXT:    fmov d16, xzr760; STREAMING-COMPAT-NEXT:    fmov d17, xzr761; STREAMING-COMPAT-NEXT:    fmov d18, xzr762; STREAMING-COMPAT-NEXT:    fmov d19, xzr763; STREAMING-COMPAT-NEXT:    fmov d20, xzr764; STREAMING-COMPAT-NEXT:    fmov d21, xzr765; STREAMING-COMPAT-NEXT:    fmov d22, xzr766; STREAMING-COMPAT-NEXT:    fmov d23, xzr767; STREAMING-COMPAT-NEXT:    fmov d24, xzr768; STREAMING-COMPAT-NEXT:    fmov d25, xzr769; STREAMING-COMPAT-NEXT:    fmov d26, xzr770; STREAMING-COMPAT-NEXT:    fmov d27, xzr771; STREAMING-COMPAT-NEXT:    fmov d28, xzr772; STREAMING-COMPAT-NEXT:    fmov d29, xzr773; STREAMING-COMPAT-NEXT:    fmov d30, xzr774; STREAMING-COMPAT-NEXT:    fmov d31, xzr775; STREAMING-COMPAT-NEXT:    ret776 777entry:778  %conv = fpext float %b to double779  %mul = fmul double %conv, %a780  ret double %mul781}782 783; Don't emit zeroing registers in "main" function.784define dso_local i32 @main() local_unnamed_addr #0 {785; CHECK-LABEL: main:786; CHECK:       // %bb.0: // %entry787; CHECK-NEXT:    mov w0, wzr788; CHECK-NEXT:    ret789 790entry:791  ret i32 0792}793 794attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone willreturn uwtable "frame-pointer"="non-leaf" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+neon,+v8a" }795