561 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK-GI4 5; Checks generated libcalls for fp128 types6 7define double @oeq(fp128 %a, fp128 %b, double %d, double %e) {8; CHECK-SD-LABEL: oeq:9; CHECK-SD: // %bb.0: // %entry10; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill11; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill12; CHECK-SD-NEXT: .cfi_def_cfa_offset 3213; CHECK-SD-NEXT: .cfi_offset w30, -1614; CHECK-SD-NEXT: .cfi_offset b8, -2415; CHECK-SD-NEXT: .cfi_offset b9, -3216; CHECK-SD-NEXT: fmov d8, d317; CHECK-SD-NEXT: fmov d9, d218; CHECK-SD-NEXT: bl __eqtf219; CHECK-SD-NEXT: cmp w0, #020; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload21; CHECK-SD-NEXT: fcsel d0, d9, d8, eq22; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload23; CHECK-SD-NEXT: ret24;25; CHECK-GI-LABEL: oeq:26; CHECK-GI: // %bb.0: // %entry27; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill28; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill29; CHECK-GI-NEXT: .cfi_def_cfa_offset 3230; CHECK-GI-NEXT: .cfi_offset w30, -1631; CHECK-GI-NEXT: .cfi_offset b8, -2432; CHECK-GI-NEXT: .cfi_offset b9, -3233; CHECK-GI-NEXT: fmov d8, d234; CHECK-GI-NEXT: fmov d9, d335; CHECK-GI-NEXT: bl __eqtf236; CHECK-GI-NEXT: cmp w0, #037; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload38; CHECK-GI-NEXT: fcsel d0, d8, d9, eq39; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload40; CHECK-GI-NEXT: ret41entry:42 %c = fcmp oeq fp128 %a, %b43 %s = select i1 %c, double %d, double %e44 ret double %s45}46 47define double @ogt(fp128 %a, fp128 %b, double %d, double %e) {48; CHECK-SD-LABEL: ogt:49; CHECK-SD: // %bb.0: // %entry50; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill51; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill52; CHECK-SD-NEXT: .cfi_def_cfa_offset 3253; CHECK-SD-NEXT: .cfi_offset w30, -1654; CHECK-SD-NEXT: .cfi_offset b8, -2455; CHECK-SD-NEXT: .cfi_offset b9, -3256; CHECK-SD-NEXT: fmov d8, d357; CHECK-SD-NEXT: fmov d9, d258; CHECK-SD-NEXT: bl __gttf259; CHECK-SD-NEXT: cmp w0, #060; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload61; CHECK-SD-NEXT: fcsel d0, d9, d8, gt62; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload63; CHECK-SD-NEXT: ret64;65; CHECK-GI-LABEL: ogt:66; CHECK-GI: // %bb.0: // %entry67; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill68; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill69; CHECK-GI-NEXT: .cfi_def_cfa_offset 3270; CHECK-GI-NEXT: .cfi_offset w30, -1671; CHECK-GI-NEXT: .cfi_offset b8, -2472; CHECK-GI-NEXT: .cfi_offset b9, -3273; CHECK-GI-NEXT: fmov d8, d274; CHECK-GI-NEXT: fmov d9, d375; CHECK-GI-NEXT: bl __gttf276; CHECK-GI-NEXT: cmp w0, #077; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload78; CHECK-GI-NEXT: fcsel d0, d8, d9, gt79; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload80; CHECK-GI-NEXT: ret81entry:82 %c = fcmp ogt fp128 %a, %b83 %s = select i1 %c, double %d, double %e84 ret double %s85}86 87define double @olt(fp128 %a, fp128 %b, double %d, double %e) {88; CHECK-SD-LABEL: olt:89; CHECK-SD: // %bb.0: // %entry90; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill91; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill92; CHECK-SD-NEXT: .cfi_def_cfa_offset 3293; CHECK-SD-NEXT: .cfi_offset w30, -1694; CHECK-SD-NEXT: .cfi_offset b8, -2495; CHECK-SD-NEXT: .cfi_offset b9, -3296; CHECK-SD-NEXT: fmov d8, d397; CHECK-SD-NEXT: fmov d9, d298; CHECK-SD-NEXT: bl __lttf299; CHECK-SD-NEXT: cmp w0, #0100; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload101; CHECK-SD-NEXT: fcsel d0, d9, d8, mi102; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload103; CHECK-SD-NEXT: ret104;105; CHECK-GI-LABEL: olt:106; CHECK-GI: // %bb.0: // %entry107; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill108; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill109; CHECK-GI-NEXT: .cfi_def_cfa_offset 32110; CHECK-GI-NEXT: .cfi_offset w30, -16111; CHECK-GI-NEXT: .cfi_offset b8, -24112; CHECK-GI-NEXT: .cfi_offset b9, -32113; CHECK-GI-NEXT: fmov d8, d2114; CHECK-GI-NEXT: fmov d9, d3115; CHECK-GI-NEXT: bl __lttf2116; CHECK-GI-NEXT: cmp w0, #0117; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload118; CHECK-GI-NEXT: fcsel d0, d8, d9, mi119; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload120; CHECK-GI-NEXT: ret121entry:122 %c = fcmp olt fp128 %a, %b123 %s = select i1 %c, double %d, double %e124 ret double %s125}126 127define double @ole(fp128 %a, fp128 %b, double %d, double %e) {128; CHECK-SD-LABEL: ole:129; CHECK-SD: // %bb.0: // %entry130; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill131; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill132; CHECK-SD-NEXT: .cfi_def_cfa_offset 32133; CHECK-SD-NEXT: .cfi_offset w30, -16134; CHECK-SD-NEXT: .cfi_offset b8, -24135; CHECK-SD-NEXT: .cfi_offset b9, -32136; CHECK-SD-NEXT: fmov d8, d3137; CHECK-SD-NEXT: fmov d9, d2138; CHECK-SD-NEXT: bl __letf2139; CHECK-SD-NEXT: cmp w0, #0140; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload141; CHECK-SD-NEXT: fcsel d0, d9, d8, le142; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload143; CHECK-SD-NEXT: ret144;145; CHECK-GI-LABEL: ole:146; CHECK-GI: // %bb.0: // %entry147; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill148; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill149; CHECK-GI-NEXT: .cfi_def_cfa_offset 32150; CHECK-GI-NEXT: .cfi_offset w30, -16151; CHECK-GI-NEXT: .cfi_offset b8, -24152; CHECK-GI-NEXT: .cfi_offset b9, -32153; CHECK-GI-NEXT: fmov d8, d2154; CHECK-GI-NEXT: fmov d9, d3155; CHECK-GI-NEXT: bl __letf2156; CHECK-GI-NEXT: cmp w0, #0157; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload158; CHECK-GI-NEXT: fcsel d0, d8, d9, le159; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload160; CHECK-GI-NEXT: ret161entry:162 %c = fcmp ole fp128 %a, %b163 %s = select i1 %c, double %d, double %e164 ret double %s165}166 167define double @one(fp128 %a, fp128 %b, double %d, double %e) {168; CHECK-SD-LABEL: one:169; CHECK-SD: // %bb.0: // %entry170; CHECK-SD-NEXT: sub sp, sp, #64171; CHECK-SD-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill172; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill173; CHECK-SD-NEXT: .cfi_def_cfa_offset 64174; CHECK-SD-NEXT: .cfi_offset w19, -8175; CHECK-SD-NEXT: .cfi_offset w30, -16176; CHECK-SD-NEXT: .cfi_offset b8, -24177; CHECK-SD-NEXT: .cfi_offset b9, -32178; CHECK-SD-NEXT: fmov d8, d3179; CHECK-SD-NEXT: fmov d9, d2180; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill181; CHECK-SD-NEXT: bl __eqtf2182; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload183; CHECK-SD-NEXT: cmp w0, #0184; CHECK-SD-NEXT: cset w19, ne185; CHECK-SD-NEXT: bl __unordtf2186; CHECK-SD-NEXT: cmp w0, #0187; CHECK-SD-NEXT: cset w8, eq188; CHECK-SD-NEXT: tst w8, w19189; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload190; CHECK-SD-NEXT: fcsel d0, d9, d8, ne191; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload192; CHECK-SD-NEXT: add sp, sp, #64193; CHECK-SD-NEXT: ret194;195; CHECK-GI-LABEL: one:196; CHECK-GI: // %bb.0: // %entry197; CHECK-GI-NEXT: sub sp, sp, #64198; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill199; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill200; CHECK-GI-NEXT: .cfi_def_cfa_offset 64201; CHECK-GI-NEXT: .cfi_offset w19, -8202; CHECK-GI-NEXT: .cfi_offset w30, -16203; CHECK-GI-NEXT: .cfi_offset b8, -24204; CHECK-GI-NEXT: .cfi_offset b9, -32205; CHECK-GI-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill206; CHECK-GI-NEXT: fmov d8, d2207; CHECK-GI-NEXT: fmov d9, d3208; CHECK-GI-NEXT: bl __eqtf2209; CHECK-GI-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload210; CHECK-GI-NEXT: mov w19, w0211; CHECK-GI-NEXT: bl __unordtf2212; CHECK-GI-NEXT: cmp w0, #0213; CHECK-GI-NEXT: ccmp w19, #0, #4, eq214; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload215; CHECK-GI-NEXT: fcsel d0, d8, d9, ne216; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload217; CHECK-GI-NEXT: add sp, sp, #64218; CHECK-GI-NEXT: ret219entry:220 %c = fcmp one fp128 %a, %b221 %s = select i1 %c, double %d, double %e222 ret double %s223}224 225define double @ord(fp128 %a, fp128 %b, double %d, double %e) {226; CHECK-SD-LABEL: ord:227; CHECK-SD: // %bb.0: // %entry228; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill229; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill230; CHECK-SD-NEXT: .cfi_def_cfa_offset 32231; CHECK-SD-NEXT: .cfi_offset w30, -16232; CHECK-SD-NEXT: .cfi_offset b8, -24233; CHECK-SD-NEXT: .cfi_offset b9, -32234; CHECK-SD-NEXT: fmov d8, d3235; CHECK-SD-NEXT: fmov d9, d2236; CHECK-SD-NEXT: bl __unordtf2237; CHECK-SD-NEXT: cmp w0, #0238; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload239; CHECK-SD-NEXT: fcsel d0, d9, d8, eq240; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload241; CHECK-SD-NEXT: ret242;243; CHECK-GI-LABEL: ord:244; CHECK-GI: // %bb.0: // %entry245; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill246; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill247; CHECK-GI-NEXT: .cfi_def_cfa_offset 32248; CHECK-GI-NEXT: .cfi_offset w30, -16249; CHECK-GI-NEXT: .cfi_offset b8, -24250; CHECK-GI-NEXT: .cfi_offset b9, -32251; CHECK-GI-NEXT: fmov d8, d2252; CHECK-GI-NEXT: fmov d9, d3253; CHECK-GI-NEXT: bl __unordtf2254; CHECK-GI-NEXT: cmp w0, #0255; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload256; CHECK-GI-NEXT: fcsel d0, d8, d9, eq257; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload258; CHECK-GI-NEXT: ret259entry:260 %c = fcmp ord fp128 %a, %b261 %s = select i1 %c, double %d, double %e262 ret double %s263}264 265define double @uno(fp128 %a, fp128 %b, double %d, double %e) {266; CHECK-SD-LABEL: uno:267; CHECK-SD: // %bb.0: // %entry268; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill269; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill270; CHECK-SD-NEXT: .cfi_def_cfa_offset 32271; CHECK-SD-NEXT: .cfi_offset w30, -16272; CHECK-SD-NEXT: .cfi_offset b8, -24273; CHECK-SD-NEXT: .cfi_offset b9, -32274; CHECK-SD-NEXT: fmov d8, d3275; CHECK-SD-NEXT: fmov d9, d2276; CHECK-SD-NEXT: bl __unordtf2277; CHECK-SD-NEXT: cmp w0, #0278; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload279; CHECK-SD-NEXT: fcsel d0, d9, d8, ne280; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload281; CHECK-SD-NEXT: ret282;283; CHECK-GI-LABEL: uno:284; CHECK-GI: // %bb.0: // %entry285; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill286; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill287; CHECK-GI-NEXT: .cfi_def_cfa_offset 32288; CHECK-GI-NEXT: .cfi_offset w30, -16289; CHECK-GI-NEXT: .cfi_offset b8, -24290; CHECK-GI-NEXT: .cfi_offset b9, -32291; CHECK-GI-NEXT: fmov d8, d2292; CHECK-GI-NEXT: fmov d9, d3293; CHECK-GI-NEXT: bl __unordtf2294; CHECK-GI-NEXT: cmp w0, #0295; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload296; CHECK-GI-NEXT: fcsel d0, d8, d9, ne297; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload298; CHECK-GI-NEXT: ret299entry:300 %c = fcmp uno fp128 %a, %b301 %s = select i1 %c, double %d, double %e302 ret double %s303}304 305define double @ueq(fp128 %a, fp128 %b, double %d, double %e) {306; CHECK-SD-LABEL: ueq:307; CHECK-SD: // %bb.0: // %entry308; CHECK-SD-NEXT: sub sp, sp, #64309; CHECK-SD-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill310; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill311; CHECK-SD-NEXT: .cfi_def_cfa_offset 64312; CHECK-SD-NEXT: .cfi_offset w19, -8313; CHECK-SD-NEXT: .cfi_offset w30, -16314; CHECK-SD-NEXT: .cfi_offset b8, -24315; CHECK-SD-NEXT: .cfi_offset b9, -32316; CHECK-SD-NEXT: fmov d8, d3317; CHECK-SD-NEXT: fmov d9, d2318; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill319; CHECK-SD-NEXT: bl __eqtf2320; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload321; CHECK-SD-NEXT: mov w19, w0322; CHECK-SD-NEXT: bl __unordtf2323; CHECK-SD-NEXT: cmp w0, #0324; CHECK-SD-NEXT: ccmp w19, #0, #4, eq325; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload326; CHECK-SD-NEXT: fcsel d0, d9, d8, eq327; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload328; CHECK-SD-NEXT: add sp, sp, #64329; CHECK-SD-NEXT: ret330;331; CHECK-GI-LABEL: ueq:332; CHECK-GI: // %bb.0: // %entry333; CHECK-GI-NEXT: sub sp, sp, #64334; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill335; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill336; CHECK-GI-NEXT: .cfi_def_cfa_offset 64337; CHECK-GI-NEXT: .cfi_offset w19, -8338; CHECK-GI-NEXT: .cfi_offset w30, -16339; CHECK-GI-NEXT: .cfi_offset b8, -24340; CHECK-GI-NEXT: .cfi_offset b9, -32341; CHECK-GI-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill342; CHECK-GI-NEXT: fmov d8, d2343; CHECK-GI-NEXT: fmov d9, d3344; CHECK-GI-NEXT: bl __eqtf2345; CHECK-GI-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload346; CHECK-GI-NEXT: mov w19, w0347; CHECK-GI-NEXT: bl __unordtf2348; CHECK-GI-NEXT: cmp w0, #0349; CHECK-GI-NEXT: ccmp w19, #0, #4, eq350; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload351; CHECK-GI-NEXT: fcsel d0, d8, d9, eq352; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload353; CHECK-GI-NEXT: add sp, sp, #64354; CHECK-GI-NEXT: ret355entry:356 %c = fcmp ueq fp128 %a, %b357 %s = select i1 %c, double %d, double %e358 ret double %s359}360 361define double @ugt(fp128 %a, fp128 %b, double %d, double %e) {362; CHECK-SD-LABEL: ugt:363; CHECK-SD: // %bb.0: // %entry364; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill365; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill366; CHECK-SD-NEXT: .cfi_def_cfa_offset 32367; CHECK-SD-NEXT: .cfi_offset w30, -16368; CHECK-SD-NEXT: .cfi_offset b8, -24369; CHECK-SD-NEXT: .cfi_offset b9, -32370; CHECK-SD-NEXT: fmov d8, d3371; CHECK-SD-NEXT: fmov d9, d2372; CHECK-SD-NEXT: bl __letf2373; CHECK-SD-NEXT: cmp w0, #0374; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload375; CHECK-SD-NEXT: fcsel d0, d9, d8, gt376; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload377; CHECK-SD-NEXT: ret378;379; CHECK-GI-LABEL: ugt:380; CHECK-GI: // %bb.0: // %entry381; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill382; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill383; CHECK-GI-NEXT: .cfi_def_cfa_offset 32384; CHECK-GI-NEXT: .cfi_offset w30, -16385; CHECK-GI-NEXT: .cfi_offset b8, -24386; CHECK-GI-NEXT: .cfi_offset b9, -32387; CHECK-GI-NEXT: fmov d8, d2388; CHECK-GI-NEXT: fmov d9, d3389; CHECK-GI-NEXT: bl __letf2390; CHECK-GI-NEXT: cmp w0, #0391; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload392; CHECK-GI-NEXT: fcsel d0, d8, d9, gt393; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload394; CHECK-GI-NEXT: ret395entry:396 %c = fcmp ugt fp128 %a, %b397 %s = select i1 %c, double %d, double %e398 ret double %s399}400 401define double @uge(fp128 %a, fp128 %b, double %d, double %e) {402; CHECK-SD-LABEL: uge:403; CHECK-SD: // %bb.0: // %entry404; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill405; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill406; CHECK-SD-NEXT: .cfi_def_cfa_offset 32407; CHECK-SD-NEXT: .cfi_offset w30, -16408; CHECK-SD-NEXT: .cfi_offset b8, -24409; CHECK-SD-NEXT: .cfi_offset b9, -32410; CHECK-SD-NEXT: fmov d8, d3411; CHECK-SD-NEXT: fmov d9, d2412; CHECK-SD-NEXT: bl __lttf2413; CHECK-SD-NEXT: cmp w0, #0414; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload415; CHECK-SD-NEXT: fcsel d0, d9, d8, pl416; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload417; CHECK-SD-NEXT: ret418;419; CHECK-GI-LABEL: uge:420; CHECK-GI: // %bb.0: // %entry421; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill422; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill423; CHECK-GI-NEXT: .cfi_def_cfa_offset 32424; CHECK-GI-NEXT: .cfi_offset w30, -16425; CHECK-GI-NEXT: .cfi_offset b8, -24426; CHECK-GI-NEXT: .cfi_offset b9, -32427; CHECK-GI-NEXT: fmov d8, d2428; CHECK-GI-NEXT: fmov d9, d3429; CHECK-GI-NEXT: bl __lttf2430; CHECK-GI-NEXT: cmp w0, #0431; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload432; CHECK-GI-NEXT: fcsel d0, d8, d9, pl433; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload434; CHECK-GI-NEXT: ret435entry:436 %c = fcmp uge fp128 %a, %b437 %s = select i1 %c, double %d, double %e438 ret double %s439}440 441define double @ult(fp128 %a, fp128 %b, double %d, double %e) {442; CHECK-SD-LABEL: ult:443; CHECK-SD: // %bb.0: // %entry444; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill445; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill446; CHECK-SD-NEXT: .cfi_def_cfa_offset 32447; CHECK-SD-NEXT: .cfi_offset w30, -16448; CHECK-SD-NEXT: .cfi_offset b8, -24449; CHECK-SD-NEXT: .cfi_offset b9, -32450; CHECK-SD-NEXT: fmov d8, d3451; CHECK-SD-NEXT: fmov d9, d2452; CHECK-SD-NEXT: bl __getf2453; CHECK-SD-NEXT: cmp w0, #0454; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload455; CHECK-SD-NEXT: fcsel d0, d9, d8, mi456; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload457; CHECK-SD-NEXT: ret458;459; CHECK-GI-LABEL: ult:460; CHECK-GI: // %bb.0: // %entry461; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill462; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill463; CHECK-GI-NEXT: .cfi_def_cfa_offset 32464; CHECK-GI-NEXT: .cfi_offset w30, -16465; CHECK-GI-NEXT: .cfi_offset b8, -24466; CHECK-GI-NEXT: .cfi_offset b9, -32467; CHECK-GI-NEXT: fmov d8, d2468; CHECK-GI-NEXT: fmov d9, d3469; CHECK-GI-NEXT: bl __getf2470; CHECK-GI-NEXT: cmp w0, #0471; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload472; CHECK-GI-NEXT: fcsel d0, d8, d9, mi473; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload474; CHECK-GI-NEXT: ret475entry:476 %c = fcmp ult fp128 %a, %b477 %s = select i1 %c, double %d, double %e478 ret double %s479}480 481define double @ule(fp128 %a, fp128 %b, double %d, double %e) {482; CHECK-SD-LABEL: ule:483; CHECK-SD: // %bb.0: // %entry484; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill485; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill486; CHECK-SD-NEXT: .cfi_def_cfa_offset 32487; CHECK-SD-NEXT: .cfi_offset w30, -16488; CHECK-SD-NEXT: .cfi_offset b8, -24489; CHECK-SD-NEXT: .cfi_offset b9, -32490; CHECK-SD-NEXT: fmov d8, d3491; CHECK-SD-NEXT: fmov d9, d2492; CHECK-SD-NEXT: bl __gttf2493; CHECK-SD-NEXT: cmp w0, #0494; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload495; CHECK-SD-NEXT: fcsel d0, d9, d8, le496; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload497; CHECK-SD-NEXT: ret498;499; CHECK-GI-LABEL: ule:500; CHECK-GI: // %bb.0: // %entry501; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill502; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill503; CHECK-GI-NEXT: .cfi_def_cfa_offset 32504; CHECK-GI-NEXT: .cfi_offset w30, -16505; CHECK-GI-NEXT: .cfi_offset b8, -24506; CHECK-GI-NEXT: .cfi_offset b9, -32507; CHECK-GI-NEXT: fmov d8, d2508; CHECK-GI-NEXT: fmov d9, d3509; CHECK-GI-NEXT: bl __gttf2510; CHECK-GI-NEXT: cmp w0, #0511; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload512; CHECK-GI-NEXT: fcsel d0, d8, d9, le513; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload514; CHECK-GI-NEXT: ret515entry:516 %c = fcmp ule fp128 %a, %b517 %s = select i1 %c, double %d, double %e518 ret double %s519}520 521define double @une(fp128 %a, fp128 %b, double %d, double %e) {522; CHECK-SD-LABEL: une:523; CHECK-SD: // %bb.0: // %entry524; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill525; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Spill526; CHECK-SD-NEXT: .cfi_def_cfa_offset 32527; CHECK-SD-NEXT: .cfi_offset w30, -16528; CHECK-SD-NEXT: .cfi_offset b8, -24529; CHECK-SD-NEXT: .cfi_offset b9, -32530; CHECK-SD-NEXT: fmov d8, d3531; CHECK-SD-NEXT: fmov d9, d2532; CHECK-SD-NEXT: bl __netf2533; CHECK-SD-NEXT: cmp w0, #0534; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload535; CHECK-SD-NEXT: fcsel d0, d9, d8, ne536; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload537; CHECK-SD-NEXT: ret538;539; CHECK-GI-LABEL: une:540; CHECK-GI: // %bb.0: // %entry541; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill542; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Spill543; CHECK-GI-NEXT: .cfi_def_cfa_offset 32544; CHECK-GI-NEXT: .cfi_offset w30, -16545; CHECK-GI-NEXT: .cfi_offset b8, -24546; CHECK-GI-NEXT: .cfi_offset b9, -32547; CHECK-GI-NEXT: fmov d8, d2548; CHECK-GI-NEXT: fmov d9, d3549; CHECK-GI-NEXT: bl __netf2550; CHECK-GI-NEXT: cmp w0, #0551; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload552; CHECK-GI-NEXT: fcsel d0, d8, d9, ne553; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload554; CHECK-GI-NEXT: ret555entry:556 %c = fcmp une fp128 %a, %b557 %s = select i1 %c, double %d, double %e558 ret double %s559}560 561