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