brintos

brintos / llvm-project-archived public Read only

0
0
Text · 66.6 KiB · b72af95 Raw
1644 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD4; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI5; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI6 7define double @frem_f64(double %a, double %b) {8; CHECK-LABEL: frem_f64:9; CHECK:       // %bb.0: // %entry10; CHECK-NEXT:    b fmod11entry:12  %c = frem double %a, %b13  ret double %c14}15 16define float @frem_f32(float %a, float %b) {17; CHECK-LABEL: frem_f32:18; CHECK:       // %bb.0: // %entry19; CHECK-NEXT:    b fmodf20entry:21  %c = frem float %a, %b22  ret float %c23}24 25define half @frem_f16(half %a, half %b) {26; CHECK-LABEL: frem_f16:27; CHECK:       // %bb.0: // %entry28; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill29; CHECK-NEXT:    .cfi_def_cfa_offset 1630; CHECK-NEXT:    .cfi_offset w30, -1631; CHECK-NEXT:    fcvt s0, h032; CHECK-NEXT:    fcvt s1, h133; CHECK-NEXT:    bl fmodf34; CHECK-NEXT:    fcvt h0, s035; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload36; CHECK-NEXT:    ret37entry:38  %c = frem half %a, %b39  ret half %c40}41 42define fp128 @frem_fp128(fp128 %a, fp128 %b) {43; CHECK-LABEL: frem_fp128:44; CHECK:       // %bb.0: // %entry45; CHECK-NEXT:    b fmodl46entry:47  %c = frem fp128 %a, %b48  ret fp128 %c49}50 51define <1 x double> @frem_v1f64(<1 x double> %a, <1 x double> %b) {52; CHECK-LABEL: frem_v1f64:53; CHECK:       // %bb.0: // %entry54; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill55; CHECK-NEXT:    .cfi_def_cfa_offset 1656; CHECK-NEXT:    .cfi_offset w30, -1657; CHECK-NEXT:    bl fmod58; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload59; CHECK-NEXT:    ret60entry:61  %c = frem <1 x double> %a, %b62  ret <1 x double> %c63}64 65define <2 x double> @frem_v2f64(<2 x double> %a, <2 x double> %b) {66; CHECK-SD-LABEL: frem_v2f64:67; CHECK-SD:       // %bb.0: // %entry68; CHECK-SD-NEXT:    sub sp, sp, #6469; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill70; CHECK-SD-NEXT:    .cfi_def_cfa_offset 6471; CHECK-SD-NEXT:    .cfi_offset w30, -1672; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill73; CHECK-SD-NEXT:    mov d0, v0.d[1]74; CHECK-SD-NEXT:    mov d1, v1.d[1]75; CHECK-SD-NEXT:    bl fmod76; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q077; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill78; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload79; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q080; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q181; CHECK-SD-NEXT:    bl fmod82; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload83; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q084; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload85; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]86; CHECK-SD-NEXT:    add sp, sp, #6487; CHECK-SD-NEXT:    ret88;89; CHECK-GI-LABEL: frem_v2f64:90; CHECK-GI:       // %bb.0: // %entry91; CHECK-GI-NEXT:    sub sp, sp, #4892; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill93; CHECK-GI-NEXT:    str x30, [sp, #32] // 8-byte Spill94; CHECK-GI-NEXT:    .cfi_def_cfa_offset 4895; CHECK-GI-NEXT:    .cfi_offset w30, -1696; CHECK-GI-NEXT:    .cfi_offset b8, -2497; CHECK-GI-NEXT:    .cfi_offset b9, -3298; CHECK-GI-NEXT:    mov d8, v0.d[1]99; CHECK-GI-NEXT:    mov d9, v1.d[1]100; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0101; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 killed $q1102; CHECK-GI-NEXT:    bl fmod103; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0104; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill105; CHECK-GI-NEXT:    fmov d1, d9106; CHECK-GI-NEXT:    fmov d0, d8107; CHECK-GI-NEXT:    bl fmod108; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload109; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0110; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload111; CHECK-GI-NEXT:    ldr x30, [sp, #32] // 8-byte Reload112; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]113; CHECK-GI-NEXT:    mov v0.16b, v1.16b114; CHECK-GI-NEXT:    add sp, sp, #48115; CHECK-GI-NEXT:    ret116entry:117  %c = frem <2 x double> %a, %b118  ret <2 x double> %c119}120 121define <3 x double> @frem_v3f64(<3 x double> %a, <3 x double> %b) {122; CHECK-SD-LABEL: frem_v3f64:123; CHECK-SD:       // %bb.0: // %entry124; CHECK-SD-NEXT:    str d12, [sp, #-48]! // 8-byte Folded Spill125; CHECK-SD-NEXT:    stp d11, d10, [sp, #8] // 16-byte Folded Spill126; CHECK-SD-NEXT:    stp d9, d8, [sp, #24] // 16-byte Folded Spill127; CHECK-SD-NEXT:    str x30, [sp, #40] // 8-byte Spill128; CHECK-SD-NEXT:    .cfi_def_cfa_offset 48129; CHECK-SD-NEXT:    .cfi_offset w30, -8130; CHECK-SD-NEXT:    .cfi_offset b8, -16131; CHECK-SD-NEXT:    .cfi_offset b9, -24132; CHECK-SD-NEXT:    .cfi_offset b10, -32133; CHECK-SD-NEXT:    .cfi_offset b11, -40134; CHECK-SD-NEXT:    .cfi_offset b12, -48135; CHECK-SD-NEXT:    fmov d11, d1136; CHECK-SD-NEXT:    fmov d1, d3137; CHECK-SD-NEXT:    fmov d8, d5138; CHECK-SD-NEXT:    fmov d9, d4139; CHECK-SD-NEXT:    fmov d10, d2140; CHECK-SD-NEXT:    bl fmod141; CHECK-SD-NEXT:    fmov d12, d0142; CHECK-SD-NEXT:    fmov d0, d11143; CHECK-SD-NEXT:    fmov d1, d9144; CHECK-SD-NEXT:    bl fmod145; CHECK-SD-NEXT:    fmov d9, d0146; CHECK-SD-NEXT:    fmov d0, d10147; CHECK-SD-NEXT:    fmov d1, d8148; CHECK-SD-NEXT:    bl fmod149; CHECK-SD-NEXT:    fmov d1, d9150; CHECK-SD-NEXT:    ldp d9, d8, [sp, #24] // 16-byte Folded Reload151; CHECK-SD-NEXT:    ldp d11, d10, [sp, #8] // 16-byte Folded Reload152; CHECK-SD-NEXT:    fmov d2, d0153; CHECK-SD-NEXT:    ldr x30, [sp, #40] // 8-byte Reload154; CHECK-SD-NEXT:    fmov d0, d12155; CHECK-SD-NEXT:    ldr d12, [sp], #48 // 8-byte Folded Reload156; CHECK-SD-NEXT:    ret157;158; CHECK-GI-LABEL: frem_v3f64:159; CHECK-GI:       // %bb.0: // %entry160; CHECK-GI-NEXT:    str d12, [sp, #-48]! // 8-byte Folded Spill161; CHECK-GI-NEXT:    stp d11, d10, [sp, #8] // 16-byte Folded Spill162; CHECK-GI-NEXT:    stp d9, d8, [sp, #24] // 16-byte Folded Spill163; CHECK-GI-NEXT:    str x30, [sp, #40] // 8-byte Spill164; CHECK-GI-NEXT:    .cfi_def_cfa_offset 48165; CHECK-GI-NEXT:    .cfi_offset w30, -8166; CHECK-GI-NEXT:    .cfi_offset b8, -16167; CHECK-GI-NEXT:    .cfi_offset b9, -24168; CHECK-GI-NEXT:    .cfi_offset b10, -32169; CHECK-GI-NEXT:    .cfi_offset b11, -40170; CHECK-GI-NEXT:    .cfi_offset b12, -48171; CHECK-GI-NEXT:    fmov d8, d1172; CHECK-GI-NEXT:    fmov d1, d3173; CHECK-GI-NEXT:    fmov d9, d2174; CHECK-GI-NEXT:    fmov d10, d4175; CHECK-GI-NEXT:    fmov d11, d5176; CHECK-GI-NEXT:    bl fmod177; CHECK-GI-NEXT:    fmov d12, d0178; CHECK-GI-NEXT:    fmov d0, d8179; CHECK-GI-NEXT:    fmov d1, d10180; CHECK-GI-NEXT:    bl fmod181; CHECK-GI-NEXT:    fmov d8, d0182; CHECK-GI-NEXT:    fmov d0, d9183; CHECK-GI-NEXT:    fmov d1, d11184; CHECK-GI-NEXT:    bl fmod185; CHECK-GI-NEXT:    fmov d1, d8186; CHECK-GI-NEXT:    ldp d9, d8, [sp, #24] // 16-byte Folded Reload187; CHECK-GI-NEXT:    ldp d11, d10, [sp, #8] // 16-byte Folded Reload188; CHECK-GI-NEXT:    fmov d2, d0189; CHECK-GI-NEXT:    ldr x30, [sp, #40] // 8-byte Reload190; CHECK-GI-NEXT:    fmov d0, d12191; CHECK-GI-NEXT:    ldr d12, [sp], #48 // 8-byte Folded Reload192; CHECK-GI-NEXT:    ret193entry:194  %c = frem <3 x double> %a, %b195  ret <3 x double> %c196}197 198define <4 x double> @frem_v4f64(<4 x double> %a, <4 x double> %b) {199; CHECK-SD-LABEL: frem_v4f64:200; CHECK-SD:       // %bb.0: // %entry201; CHECK-SD-NEXT:    sub sp, sp, #96202; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Spill203; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96204; CHECK-SD-NEXT:    .cfi_offset w30, -16205; CHECK-SD-NEXT:    stp q0, q2, [sp] // 32-byte Folded Spill206; CHECK-SD-NEXT:    mov d0, v0.d[1]207; CHECK-SD-NEXT:    stp q1, q3, [sp, #48] // 32-byte Folded Spill208; CHECK-SD-NEXT:    mov d1, v2.d[1]209; CHECK-SD-NEXT:    bl fmod210; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0211; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill212; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload213; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0214; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1215; CHECK-SD-NEXT:    bl fmod216; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload217; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0218; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]219; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill220; CHECK-SD-NEXT:    ldp q0, q1, [sp, #48] // 32-byte Folded Reload221; CHECK-SD-NEXT:    mov d0, v0.d[1]222; CHECK-SD-NEXT:    mov d1, v1.d[1]223; CHECK-SD-NEXT:    bl fmod224; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0225; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill226; CHECK-SD-NEXT:    ldp q0, q1, [sp, #48] // 32-byte Folded Reload227; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0228; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1229; CHECK-SD-NEXT:    bl fmod230; CHECK-SD-NEXT:    fmov d1, d0231; CHECK-SD-NEXT:    ldp q2, q0, [sp, #16] // 32-byte Folded Reload232; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Reload233; CHECK-SD-NEXT:    mov v1.d[1], v2.d[0]234; CHECK-SD-NEXT:    add sp, sp, #96235; CHECK-SD-NEXT:    ret236;237; CHECK-GI-LABEL: frem_v4f64:238; CHECK-GI:       // %bb.0: // %entry239; CHECK-GI-NEXT:    sub sp, sp, #112240; CHECK-GI-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill241; CHECK-GI-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill242; CHECK-GI-NEXT:    str x30, [sp, #96] // 8-byte Spill243; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112244; CHECK-GI-NEXT:    .cfi_offset w30, -16245; CHECK-GI-NEXT:    .cfi_offset b8, -24246; CHECK-GI-NEXT:    .cfi_offset b9, -32247; CHECK-GI-NEXT:    .cfi_offset b10, -40248; CHECK-GI-NEXT:    .cfi_offset b11, -48249; CHECK-GI-NEXT:    mov v4.16b, v1.16b250; CHECK-GI-NEXT:    str q1, [sp, #32] // 16-byte Spill251; CHECK-GI-NEXT:    mov v1.16b, v2.16b252; CHECK-GI-NEXT:    str q3, [sp] // 16-byte Spill253; CHECK-GI-NEXT:    mov d8, v0.d[1]254; CHECK-GI-NEXT:    mov d10, v2.d[1]255; CHECK-GI-NEXT:    mov d11, v3.d[1]256; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0257; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 killed $q1258; CHECK-GI-NEXT:    mov d9, v4.d[1]259; CHECK-GI-NEXT:    bl fmod260; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0261; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill262; CHECK-GI-NEXT:    fmov d1, d10263; CHECK-GI-NEXT:    fmov d0, d8264; CHECK-GI-NEXT:    bl fmod265; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0266; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill267; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload268; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload269; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 killed $q1270; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0271; CHECK-GI-NEXT:    bl fmod272; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0273; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill274; CHECK-GI-NEXT:    fmov d1, d11275; CHECK-GI-NEXT:    fmov d0, d9276; CHECK-GI-NEXT:    bl fmod277; CHECK-GI-NEXT:    ldp q3, q1, [sp, #16] // 32-byte Folded Reload278; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0279; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload280; CHECK-GI-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload281; CHECK-GI-NEXT:    ldr x30, [sp, #96] // 8-byte Reload282; CHECK-GI-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload283; CHECK-GI-NEXT:    mov v2.d[1], v3.d[0]284; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]285; CHECK-GI-NEXT:    mov v0.16b, v2.16b286; CHECK-GI-NEXT:    add sp, sp, #112287; CHECK-GI-NEXT:    ret288entry:289  %c = frem <4 x double> %a, %b290  ret <4 x double> %c291}292 293define <2 x float> @frem_v2f32(<2 x float> %a, <2 x float> %b) {294; CHECK-SD-LABEL: frem_v2f32:295; CHECK-SD:       // %bb.0: // %entry296; CHECK-SD-NEXT:    sub sp, sp, #64297; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill298; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64299; CHECK-SD-NEXT:    .cfi_offset w30, -16300; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1301; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0302; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill303; CHECK-SD-NEXT:    mov s0, v0.s[1]304; CHECK-SD-NEXT:    mov s1, v1.s[1]305; CHECK-SD-NEXT:    bl fmodf306; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0307; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill308; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload309; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0310; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1311; CHECK-SD-NEXT:    bl fmodf312; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload313; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0314; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload315; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]316; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0317; CHECK-SD-NEXT:    add sp, sp, #64318; CHECK-SD-NEXT:    ret319;320; CHECK-GI-LABEL: frem_v2f32:321; CHECK-GI:       // %bb.0: // %entry322; CHECK-GI-NEXT:    sub sp, sp, #48323; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill324; CHECK-GI-NEXT:    str x30, [sp, #32] // 8-byte Spill325; CHECK-GI-NEXT:    .cfi_def_cfa_offset 48326; CHECK-GI-NEXT:    .cfi_offset w30, -16327; CHECK-GI-NEXT:    .cfi_offset b8, -24328; CHECK-GI-NEXT:    .cfi_offset b9, -32329; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0330; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1331; CHECK-GI-NEXT:    mov s8, v0.s[1]332; CHECK-GI-NEXT:    mov s9, v1.s[1]333; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0334; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1335; CHECK-GI-NEXT:    bl fmodf336; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0337; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill338; CHECK-GI-NEXT:    fmov s1, s9339; CHECK-GI-NEXT:    fmov s0, s8340; CHECK-GI-NEXT:    bl fmodf341; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload342; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0343; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload344; CHECK-GI-NEXT:    ldr x30, [sp, #32] // 8-byte Reload345; CHECK-GI-NEXT:    mov v1.s[1], v0.s[0]346; CHECK-GI-NEXT:    fmov d0, d1347; CHECK-GI-NEXT:    add sp, sp, #48348; CHECK-GI-NEXT:    ret349entry:350  %c = frem <2 x float> %a, %b351  ret <2 x float> %c352}353 354define <3 x float> @frem_v3f32(<3 x float> %a, <3 x float> %b) {355; CHECK-SD-LABEL: frem_v3f32:356; CHECK-SD:       // %bb.0: // %entry357; CHECK-SD-NEXT:    sub sp, sp, #64358; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill359; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64360; CHECK-SD-NEXT:    .cfi_offset w30, -16361; CHECK-SD-NEXT:    stp q0, q1, [sp, #16] // 32-byte Folded Spill362; CHECK-SD-NEXT:    mov s0, v0.s[1]363; CHECK-SD-NEXT:    mov s1, v1.s[1]364; CHECK-SD-NEXT:    bl fmodf365; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0366; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill367; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload368; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0369; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1370; CHECK-SD-NEXT:    bl fmodf371; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload372; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0373; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]374; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill375; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload376; CHECK-SD-NEXT:    mov s0, v0.s[2]377; CHECK-SD-NEXT:    mov s1, v1.s[2]378; CHECK-SD-NEXT:    bl fmodf379; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload380; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0381; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload382; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]383; CHECK-SD-NEXT:    mov v0.16b, v1.16b384; CHECK-SD-NEXT:    add sp, sp, #64385; CHECK-SD-NEXT:    ret386;387; CHECK-GI-LABEL: frem_v3f32:388; CHECK-GI:       // %bb.0: // %entry389; CHECK-GI-NEXT:    sub sp, sp, #80390; CHECK-GI-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill391; CHECK-GI-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill392; CHECK-GI-NEXT:    str x30, [sp, #64] // 8-byte Spill393; CHECK-GI-NEXT:    .cfi_def_cfa_offset 80394; CHECK-GI-NEXT:    .cfi_offset w30, -16395; CHECK-GI-NEXT:    .cfi_offset b8, -24396; CHECK-GI-NEXT:    .cfi_offset b9, -32397; CHECK-GI-NEXT:    .cfi_offset b10, -40398; CHECK-GI-NEXT:    .cfi_offset b11, -48399; CHECK-GI-NEXT:    mov s8, v0.s[1]400; CHECK-GI-NEXT:    mov s9, v0.s[2]401; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0402; CHECK-GI-NEXT:    mov s10, v1.s[1]403; CHECK-GI-NEXT:    mov s11, v1.s[2]404; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1405; CHECK-GI-NEXT:    bl fmodf406; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0407; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill408; CHECK-GI-NEXT:    fmov s1, s10409; CHECK-GI-NEXT:    fmov s0, s8410; CHECK-GI-NEXT:    bl fmodf411; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0412; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill413; CHECK-GI-NEXT:    fmov s1, s11414; CHECK-GI-NEXT:    fmov s0, s9415; CHECK-GI-NEXT:    bl fmodf416; CHECK-GI-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload417; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0418; CHECK-GI-NEXT:    ldr x30, [sp, #64] // 8-byte Reload419; CHECK-GI-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload420; CHECK-GI-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload421; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]422; CHECK-GI-NEXT:    mov v1.s[2], v0.s[0]423; CHECK-GI-NEXT:    mov v0.16b, v1.16b424; CHECK-GI-NEXT:    add sp, sp, #80425; CHECK-GI-NEXT:    ret426entry:427  %c = frem <3 x float> %a, %b428  ret <3 x float> %c429}430 431define <4 x float> @frem_v4f32(<4 x float> %a, <4 x float> %b) {432; CHECK-SD-LABEL: frem_v4f32:433; CHECK-SD:       // %bb.0: // %entry434; CHECK-SD-NEXT:    sub sp, sp, #64435; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill436; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64437; CHECK-SD-NEXT:    .cfi_offset w30, -16438; CHECK-SD-NEXT:    stp q0, q1, [sp, #16] // 32-byte Folded Spill439; CHECK-SD-NEXT:    mov s0, v0.s[1]440; CHECK-SD-NEXT:    mov s1, v1.s[1]441; CHECK-SD-NEXT:    bl fmodf442; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0443; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill444; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload445; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0446; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1447; CHECK-SD-NEXT:    bl fmodf448; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload449; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0450; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]451; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill452; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload453; CHECK-SD-NEXT:    mov s0, v0.s[2]454; CHECK-SD-NEXT:    mov s1, v1.s[2]455; CHECK-SD-NEXT:    bl fmodf456; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload457; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0458; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]459; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill460; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload461; CHECK-SD-NEXT:    mov s0, v0.s[3]462; CHECK-SD-NEXT:    mov s1, v1.s[3]463; CHECK-SD-NEXT:    bl fmodf464; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload465; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0466; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload467; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]468; CHECK-SD-NEXT:    mov v0.16b, v1.16b469; CHECK-SD-NEXT:    add sp, sp, #64470; CHECK-SD-NEXT:    ret471;472; CHECK-GI-LABEL: frem_v4f32:473; CHECK-GI:       // %bb.0: // %entry474; CHECK-GI-NEXT:    sub sp, sp, #112475; CHECK-GI-NEXT:    stp d13, d12, [sp, #48] // 16-byte Folded Spill476; CHECK-GI-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill477; CHECK-GI-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill478; CHECK-GI-NEXT:    str x30, [sp, #96] // 8-byte Spill479; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112480; CHECK-GI-NEXT:    .cfi_offset w30, -16481; CHECK-GI-NEXT:    .cfi_offset b8, -24482; CHECK-GI-NEXT:    .cfi_offset b9, -32483; CHECK-GI-NEXT:    .cfi_offset b10, -40484; CHECK-GI-NEXT:    .cfi_offset b11, -48485; CHECK-GI-NEXT:    .cfi_offset b12, -56486; CHECK-GI-NEXT:    .cfi_offset b13, -64487; CHECK-GI-NEXT:    mov s8, v0.s[1]488; CHECK-GI-NEXT:    mov s9, v0.s[2]489; CHECK-GI-NEXT:    mov s10, v0.s[3]490; CHECK-GI-NEXT:    mov s11, v1.s[1]491; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0492; CHECK-GI-NEXT:    mov s12, v1.s[2]493; CHECK-GI-NEXT:    mov s13, v1.s[3]494; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1495; CHECK-GI-NEXT:    bl fmodf496; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0497; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill498; CHECK-GI-NEXT:    fmov s1, s11499; CHECK-GI-NEXT:    fmov s0, s8500; CHECK-GI-NEXT:    bl fmodf501; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0502; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill503; CHECK-GI-NEXT:    fmov s1, s12504; CHECK-GI-NEXT:    fmov s0, s9505; CHECK-GI-NEXT:    bl fmodf506; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0507; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill508; CHECK-GI-NEXT:    fmov s1, s13509; CHECK-GI-NEXT:    fmov s0, s10510; CHECK-GI-NEXT:    bl fmodf511; CHECK-GI-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload512; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0513; CHECK-GI-NEXT:    ldr x30, [sp, #96] // 8-byte Reload514; CHECK-GI-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload515; CHECK-GI-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload516; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]517; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload518; CHECK-GI-NEXT:    ldp d13, d12, [sp, #48] // 16-byte Folded Reload519; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]520; CHECK-GI-NEXT:    mov v1.s[3], v0.s[0]521; CHECK-GI-NEXT:    mov v0.16b, v1.16b522; CHECK-GI-NEXT:    add sp, sp, #112523; CHECK-GI-NEXT:    ret524entry:525  %c = frem <4 x float> %a, %b526  ret <4 x float> %c527}528 529define <8 x float> @frem_v8f32(<8 x float> %a, <8 x float> %b) {530; CHECK-SD-LABEL: frem_v8f32:531; CHECK-SD:       // %bb.0: // %entry532; CHECK-SD-NEXT:    sub sp, sp, #96533; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Spill534; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96535; CHECK-SD-NEXT:    .cfi_offset w30, -16536; CHECK-SD-NEXT:    stp q0, q2, [sp] // 32-byte Folded Spill537; CHECK-SD-NEXT:    mov s0, v0.s[1]538; CHECK-SD-NEXT:    stp q1, q3, [sp, #32] // 32-byte Folded Spill539; CHECK-SD-NEXT:    mov s1, v2.s[1]540; CHECK-SD-NEXT:    bl fmodf541; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0542; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill543; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload544; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0545; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1546; CHECK-SD-NEXT:    bl fmodf547; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload548; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0549; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]550; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill551; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload552; CHECK-SD-NEXT:    mov s0, v0.s[2]553; CHECK-SD-NEXT:    mov s1, v1.s[2]554; CHECK-SD-NEXT:    bl fmodf555; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload556; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0557; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]558; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill559; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload560; CHECK-SD-NEXT:    mov s0, v0.s[3]561; CHECK-SD-NEXT:    mov s1, v1.s[3]562; CHECK-SD-NEXT:    bl fmodf563; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload564; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0565; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]566; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill567; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload568; CHECK-SD-NEXT:    mov s0, v0.s[1]569; CHECK-SD-NEXT:    mov s1, v1.s[1]570; CHECK-SD-NEXT:    bl fmodf571; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0572; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill573; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload574; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0575; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1576; CHECK-SD-NEXT:    bl fmodf577; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload578; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0579; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]580; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill581; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload582; CHECK-SD-NEXT:    mov s0, v0.s[2]583; CHECK-SD-NEXT:    mov s1, v1.s[2]584; CHECK-SD-NEXT:    bl fmodf585; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload586; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0587; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]588; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill589; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload590; CHECK-SD-NEXT:    mov s0, v0.s[3]591; CHECK-SD-NEXT:    mov s1, v1.s[3]592; CHECK-SD-NEXT:    bl fmodf593; CHECK-SD-NEXT:    fmov s2, s0594; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload595; CHECK-SD-NEXT:    ldr q0, [sp, #64] // 16-byte Reload596; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Reload597; CHECK-SD-NEXT:    mov v1.s[3], v2.s[0]598; CHECK-SD-NEXT:    add sp, sp, #96599; CHECK-SD-NEXT:    ret600;601; CHECK-GI-LABEL: frem_v8f32:602; CHECK-GI:       // %bb.0: // %entry603; CHECK-GI-NEXT:    sub sp, sp, #208604; CHECK-GI-NEXT:    stp d15, d14, [sp, #128] // 16-byte Folded Spill605; CHECK-GI-NEXT:    stp d13, d12, [sp, #144] // 16-byte Folded Spill606; CHECK-GI-NEXT:    stp d11, d10, [sp, #160] // 16-byte Folded Spill607; CHECK-GI-NEXT:    stp d9, d8, [sp, #176] // 16-byte Folded Spill608; CHECK-GI-NEXT:    str x30, [sp, #192] // 8-byte Spill609; CHECK-GI-NEXT:    .cfi_def_cfa_offset 208610; CHECK-GI-NEXT:    .cfi_offset w30, -16611; CHECK-GI-NEXT:    .cfi_offset b8, -24612; CHECK-GI-NEXT:    .cfi_offset b9, -32613; CHECK-GI-NEXT:    .cfi_offset b10, -40614; CHECK-GI-NEXT:    .cfi_offset b11, -48615; CHECK-GI-NEXT:    .cfi_offset b12, -56616; CHECK-GI-NEXT:    .cfi_offset b13, -64617; CHECK-GI-NEXT:    .cfi_offset b14, -72618; CHECK-GI-NEXT:    .cfi_offset b15, -80619; CHECK-GI-NEXT:    mov v4.16b, v1.16b620; CHECK-GI-NEXT:    mov v1.16b, v2.16b621; CHECK-GI-NEXT:    mov s8, v0.s[1]622; CHECK-GI-NEXT:    mov s9, v0.s[2]623; CHECK-GI-NEXT:    mov s10, v0.s[3]624; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0625; CHECK-GI-NEXT:    mov s12, v3.s[1]626; CHECK-GI-NEXT:    mov s11, v3.s[2]627; CHECK-GI-NEXT:    mov s2, v4.s[1]628; CHECK-GI-NEXT:    stp q3, q4, [sp] // 32-byte Folded Spill629; CHECK-GI-NEXT:    mov s5, v4.s[3]630; CHECK-GI-NEXT:    mov s14, v1.s[1]631; CHECK-GI-NEXT:    mov s15, v1.s[2]632; CHECK-GI-NEXT:    mov s13, v1.s[3]633; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1634; CHECK-GI-NEXT:    str s2, [sp, #48] // 4-byte Spill635; CHECK-GI-NEXT:    mov s2, v4.s[2]636; CHECK-GI-NEXT:    str s2, [sp, #112] // 4-byte Spill637; CHECK-GI-NEXT:    mov s2, v3.s[3]638; CHECK-GI-NEXT:    stp s2, s5, [sp, #200] // 8-byte Folded Spill639; CHECK-GI-NEXT:    bl fmodf640; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0641; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill642; CHECK-GI-NEXT:    fmov s1, s14643; CHECK-GI-NEXT:    fmov s0, s8644; CHECK-GI-NEXT:    bl fmodf645; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0646; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill647; CHECK-GI-NEXT:    fmov s1, s15648; CHECK-GI-NEXT:    fmov s0, s9649; CHECK-GI-NEXT:    bl fmodf650; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0651; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill652; CHECK-GI-NEXT:    fmov s1, s13653; CHECK-GI-NEXT:    fmov s0, s10654; CHECK-GI-NEXT:    bl fmodf655; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0656; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill657; CHECK-GI-NEXT:    ldp q1, q0, [sp] // 32-byte Folded Reload658; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0659; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1660; CHECK-GI-NEXT:    bl fmodf661; CHECK-GI-NEXT:    fmov s1, s12662; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0663; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill664; CHECK-GI-NEXT:    ldr s0, [sp, #48] // 4-byte Reload665; CHECK-GI-NEXT:    bl fmodf666; CHECK-GI-NEXT:    fmov s1, s11667; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0668; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill669; CHECK-GI-NEXT:    ldr s0, [sp, #112] // 4-byte Reload670; CHECK-GI-NEXT:    bl fmodf671; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0672; CHECK-GI-NEXT:    str q0, [sp, #112] // 16-byte Spill673; CHECK-GI-NEXT:    ldp s1, s0, [sp, #200] // 8-byte Folded Reload674; CHECK-GI-NEXT:    bl fmodf675; CHECK-GI-NEXT:    ldp q3, q2, [sp, #16] // 32-byte Folded Reload676; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0677; CHECK-GI-NEXT:    ldr q1, [sp, #96] // 16-byte Reload678; CHECK-GI-NEXT:    ldp d9, d8, [sp, #176] // 16-byte Folded Reload679; CHECK-GI-NEXT:    ldr x30, [sp, #192] // 8-byte Reload680; CHECK-GI-NEXT:    ldp d11, d10, [sp, #160] // 16-byte Folded Reload681; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]682; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload683; CHECK-GI-NEXT:    ldp d13, d12, [sp, #144] // 16-byte Folded Reload684; CHECK-GI-NEXT:    mov v3.s[1], v2.s[0]685; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload686; CHECK-GI-NEXT:    ldp d15, d14, [sp, #128] // 16-byte Folded Reload687; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]688; CHECK-GI-NEXT:    ldr q2, [sp, #112] // 16-byte Reload689; CHECK-GI-NEXT:    mov v3.s[2], v2.s[0]690; CHECK-GI-NEXT:    ldr q2, [sp, #64] // 16-byte Reload691; CHECK-GI-NEXT:    mov v1.s[3], v2.s[0]692; CHECK-GI-NEXT:    mov v3.s[3], v0.s[0]693; CHECK-GI-NEXT:    mov v2.16b, v1.16b694; CHECK-GI-NEXT:    mov v1.16b, v3.16b695; CHECK-GI-NEXT:    mov v0.16b, v2.16b696; CHECK-GI-NEXT:    add sp, sp, #208697; CHECK-GI-NEXT:    ret698entry:699  %c = frem <8 x float> %a, %b700  ret <8 x float> %c701}702 703define <7 x half> @frem_v7f16(<7 x half> %a, <7 x half> %b) {704; CHECK-SD-LABEL: frem_v7f16:705; CHECK-SD:       // %bb.0: // %entry706; CHECK-SD-NEXT:    sub sp, sp, #64707; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill708; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64709; CHECK-SD-NEXT:    .cfi_offset w30, -16710; CHECK-SD-NEXT:    mov h3, v0.h[1]711; CHECK-SD-NEXT:    mov h2, v1.h[1]712; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill713; CHECK-SD-NEXT:    fcvt s0, h3714; CHECK-SD-NEXT:    fcvt s1, h2715; CHECK-SD-NEXT:    bl fmodf716; CHECK-SD-NEXT:    fcvt h0, s0717; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill718; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload719; CHECK-SD-NEXT:    fcvt s0, h0720; CHECK-SD-NEXT:    fcvt s1, h1721; CHECK-SD-NEXT:    bl fmodf722; CHECK-SD-NEXT:    fcvt h0, s0723; CHECK-SD-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload724; CHECK-SD-NEXT:    mov h1, v1.h[2]725; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]726; CHECK-SD-NEXT:    fcvt s1, h1727; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill728; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload729; CHECK-SD-NEXT:    mov h0, v0.h[2]730; CHECK-SD-NEXT:    fcvt s0, h0731; CHECK-SD-NEXT:    bl fmodf732; CHECK-SD-NEXT:    fcvt h0, s0733; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload734; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]735; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill736; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload737; CHECK-SD-NEXT:    mov h0, v0.h[3]738; CHECK-SD-NEXT:    mov h1, v1.h[3]739; CHECK-SD-NEXT:    fcvt s0, h0740; CHECK-SD-NEXT:    fcvt s1, h1741; CHECK-SD-NEXT:    bl fmodf742; CHECK-SD-NEXT:    fcvt h0, s0743; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload744; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]745; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill746; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload747; CHECK-SD-NEXT:    mov h0, v0.h[4]748; CHECK-SD-NEXT:    mov h1, v1.h[4]749; CHECK-SD-NEXT:    fcvt s0, h0750; CHECK-SD-NEXT:    fcvt s1, h1751; CHECK-SD-NEXT:    bl fmodf752; CHECK-SD-NEXT:    fcvt h0, s0753; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload754; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]755; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill756; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload757; CHECK-SD-NEXT:    mov h0, v0.h[5]758; CHECK-SD-NEXT:    mov h1, v1.h[5]759; CHECK-SD-NEXT:    fcvt s0, h0760; CHECK-SD-NEXT:    fcvt s1, h1761; CHECK-SD-NEXT:    bl fmodf762; CHECK-SD-NEXT:    fcvt h0, s0763; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload764; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]765; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill766; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload767; CHECK-SD-NEXT:    mov h0, v0.h[6]768; CHECK-SD-NEXT:    mov h1, v1.h[6]769; CHECK-SD-NEXT:    fcvt s0, h0770; CHECK-SD-NEXT:    fcvt s1, h1771; CHECK-SD-NEXT:    bl fmodf772; CHECK-SD-NEXT:    fcvt h0, s0773; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload774; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]775; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill776; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload777; CHECK-SD-NEXT:    mov h0, v0.h[7]778; CHECK-SD-NEXT:    mov h1, v1.h[7]779; CHECK-SD-NEXT:    fcvt s0, h0780; CHECK-SD-NEXT:    fcvt s1, h1781; CHECK-SD-NEXT:    bl fmodf782; CHECK-SD-NEXT:    fcvt h1, s0783; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload784; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload785; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]786; CHECK-SD-NEXT:    add sp, sp, #64787; CHECK-SD-NEXT:    ret788;789; CHECK-GI-LABEL: frem_v7f16:790; CHECK-GI:       // %bb.0: // %entry791; CHECK-GI-NEXT:    sub sp, sp, #176792; CHECK-GI-NEXT:    stp d15, d14, [sp, #96] // 16-byte Folded Spill793; CHECK-GI-NEXT:    stp d13, d12, [sp, #112] // 16-byte Folded Spill794; CHECK-GI-NEXT:    stp d11, d10, [sp, #128] // 16-byte Folded Spill795; CHECK-GI-NEXT:    stp d9, d8, [sp, #144] // 16-byte Folded Spill796; CHECK-GI-NEXT:    str x30, [sp, #160] // 8-byte Spill797; CHECK-GI-NEXT:    .cfi_def_cfa_offset 176798; CHECK-GI-NEXT:    .cfi_offset w30, -16799; CHECK-GI-NEXT:    .cfi_offset b8, -24800; CHECK-GI-NEXT:    .cfi_offset b9, -32801; CHECK-GI-NEXT:    .cfi_offset b10, -40802; CHECK-GI-NEXT:    .cfi_offset b11, -48803; CHECK-GI-NEXT:    .cfi_offset b12, -56804; CHECK-GI-NEXT:    .cfi_offset b13, -64805; CHECK-GI-NEXT:    .cfi_offset b14, -72806; CHECK-GI-NEXT:    .cfi_offset b15, -80807; CHECK-GI-NEXT:    mov h2, v0.h[5]808; CHECK-GI-NEXT:    mov h9, v0.h[1]809; CHECK-GI-NEXT:    mov h10, v0.h[2]810; CHECK-GI-NEXT:    mov h11, v0.h[3]811; CHECK-GI-NEXT:    mov h12, v0.h[4]812; CHECK-GI-NEXT:    mov h14, v1.h[1]813; CHECK-GI-NEXT:    mov h15, v1.h[2]814; CHECK-GI-NEXT:    mov h8, v1.h[3]815; CHECK-GI-NEXT:    mov h13, v1.h[4]816; CHECK-GI-NEXT:    str h2, [sp, #48] // 2-byte Spill817; CHECK-GI-NEXT:    mov h2, v0.h[6]818; CHECK-GI-NEXT:    fcvt s0, h0819; CHECK-GI-NEXT:    str h2, [sp, #80] // 2-byte Spill820; CHECK-GI-NEXT:    mov h2, v1.h[5]821; CHECK-GI-NEXT:    str h2, [sp, #172] // 2-byte Spill822; CHECK-GI-NEXT:    mov h2, v1.h[6]823; CHECK-GI-NEXT:    fcvt s1, h1824; CHECK-GI-NEXT:    str h2, [sp, #174] // 2-byte Spill825; CHECK-GI-NEXT:    bl fmodf826; CHECK-GI-NEXT:    fcvt s2, h9827; CHECK-GI-NEXT:    fcvt h0, s0828; CHECK-GI-NEXT:    fcvt s1, h14829; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill830; CHECK-GI-NEXT:    fmov s0, s2831; CHECK-GI-NEXT:    bl fmodf832; CHECK-GI-NEXT:    fcvt s2, h10833; CHECK-GI-NEXT:    fcvt h0, s0834; CHECK-GI-NEXT:    fcvt s1, h15835; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill836; CHECK-GI-NEXT:    fmov s0, s2837; CHECK-GI-NEXT:    bl fmodf838; CHECK-GI-NEXT:    fcvt s2, h11839; CHECK-GI-NEXT:    fcvt h0, s0840; CHECK-GI-NEXT:    fcvt s1, h8841; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill842; CHECK-GI-NEXT:    fmov s0, s2843; CHECK-GI-NEXT:    bl fmodf844; CHECK-GI-NEXT:    fcvt s2, h12845; CHECK-GI-NEXT:    fcvt h0, s0846; CHECK-GI-NEXT:    fcvt s1, h13847; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill848; CHECK-GI-NEXT:    fmov s0, s2849; CHECK-GI-NEXT:    bl fmodf850; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload851; CHECK-GI-NEXT:    fcvt h0, s0852; CHECK-GI-NEXT:    fcvt s2, h1853; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill854; CHECK-GI-NEXT:    ldr h0, [sp, #172] // 2-byte Reload855; CHECK-GI-NEXT:    fcvt s1, h0856; CHECK-GI-NEXT:    fmov s0, s2857; CHECK-GI-NEXT:    bl fmodf858; CHECK-GI-NEXT:    ldr h1, [sp, #80] // 2-byte Reload859; CHECK-GI-NEXT:    fcvt h0, s0860; CHECK-GI-NEXT:    fcvt s2, h1861; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill862; CHECK-GI-NEXT:    ldr h0, [sp, #174] // 2-byte Reload863; CHECK-GI-NEXT:    fcvt s1, h0864; CHECK-GI-NEXT:    fmov s0, s2865; CHECK-GI-NEXT:    bl fmodf866; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload867; CHECK-GI-NEXT:    fcvt h0, s0868; CHECK-GI-NEXT:    ldr q1, [sp, #64] // 16-byte Reload869; CHECK-GI-NEXT:    ldp d9, d8, [sp, #144] // 16-byte Folded Reload870; CHECK-GI-NEXT:    ldp d11, d10, [sp, #128] // 16-byte Folded Reload871; CHECK-GI-NEXT:    ldr x30, [sp, #160] // 8-byte Reload872; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]873; CHECK-GI-NEXT:    ldp d13, d12, [sp, #112] // 16-byte Folded Reload874; CHECK-GI-NEXT:    ldp d15, d14, [sp, #96] // 16-byte Folded Reload875; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]876; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload877; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]878; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload879; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]880; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload881; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]882; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]883; CHECK-GI-NEXT:    mov v0.16b, v1.16b884; CHECK-GI-NEXT:    add sp, sp, #176885; CHECK-GI-NEXT:    ret886entry:887  %c = frem <7 x half> %a, %b888  ret <7 x half> %c889}890 891define <4 x half> @frem_v4f16(<4 x half> %a, <4 x half> %b) {892; CHECK-SD-LABEL: frem_v4f16:893; CHECK-SD:       // %bb.0: // %entry894; CHECK-SD-NEXT:    sub sp, sp, #64895; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill896; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64897; CHECK-SD-NEXT:    .cfi_offset w30, -16898; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1899; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0900; CHECK-SD-NEXT:    mov h3, v0.h[1]901; CHECK-SD-NEXT:    mov h2, v1.h[1]902; CHECK-SD-NEXT:    stp q0, q1, [sp, #16] // 32-byte Folded Spill903; CHECK-SD-NEXT:    fcvt s0, h3904; CHECK-SD-NEXT:    fcvt s1, h2905; CHECK-SD-NEXT:    bl fmodf906; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload907; CHECK-SD-NEXT:    fcvt h0, s0908; CHECK-SD-NEXT:    fcvt s2, h1909; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill910; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload911; CHECK-SD-NEXT:    fcvt s1, h0912; CHECK-SD-NEXT:    fmov s0, s2913; CHECK-SD-NEXT:    bl fmodf914; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload915; CHECK-SD-NEXT:    fcvt h3, s0916; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload917; CHECK-SD-NEXT:    mov h1, v1.h[2]918; CHECK-SD-NEXT:    mov h2, v0.h[2]919; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload920; CHECK-SD-NEXT:    mov v3.h[1], v0.h[0]921; CHECK-SD-NEXT:    fcvt s0, h1922; CHECK-SD-NEXT:    fcvt s1, h2923; CHECK-SD-NEXT:    str q3, [sp] // 16-byte Spill924; CHECK-SD-NEXT:    bl fmodf925; CHECK-SD-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload926; CHECK-SD-NEXT:    fcvt h0, s0927; CHECK-SD-NEXT:    ldr q3, [sp] // 16-byte Reload928; CHECK-SD-NEXT:    mov h1, v1.h[3]929; CHECK-SD-NEXT:    mov h2, v2.h[3]930; CHECK-SD-NEXT:    mov v3.h[2], v0.h[0]931; CHECK-SD-NEXT:    fcvt s0, h1932; CHECK-SD-NEXT:    fcvt s1, h2933; CHECK-SD-NEXT:    str q3, [sp] // 16-byte Spill934; CHECK-SD-NEXT:    bl fmodf935; CHECK-SD-NEXT:    fcvt h1, s0936; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload937; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload938; CHECK-SD-NEXT:    mov v0.h[3], v1.h[0]939; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0940; CHECK-SD-NEXT:    add sp, sp, #64941; CHECK-SD-NEXT:    ret942;943; CHECK-GI-LABEL: frem_v4f16:944; CHECK-GI:       // %bb.0: // %entry945; CHECK-GI-NEXT:    sub sp, sp, #112946; CHECK-GI-NEXT:    stp d13, d12, [sp, #48] // 16-byte Folded Spill947; CHECK-GI-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill948; CHECK-GI-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill949; CHECK-GI-NEXT:    str x30, [sp, #96] // 8-byte Spill950; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112951; CHECK-GI-NEXT:    .cfi_offset w30, -16952; CHECK-GI-NEXT:    .cfi_offset b8, -24953; CHECK-GI-NEXT:    .cfi_offset b9, -32954; CHECK-GI-NEXT:    .cfi_offset b10, -40955; CHECK-GI-NEXT:    .cfi_offset b11, -48956; CHECK-GI-NEXT:    .cfi_offset b12, -56957; CHECK-GI-NEXT:    .cfi_offset b13, -64958; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0959; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1960; CHECK-GI-NEXT:    mov h8, v0.h[1]961; CHECK-GI-NEXT:    mov h9, v0.h[2]962; CHECK-GI-NEXT:    mov h10, v0.h[3]963; CHECK-GI-NEXT:    mov h11, v1.h[1]964; CHECK-GI-NEXT:    mov h12, v1.h[2]965; CHECK-GI-NEXT:    mov h13, v1.h[3]966; CHECK-GI-NEXT:    fcvt s0, h0967; CHECK-GI-NEXT:    fcvt s1, h1968; CHECK-GI-NEXT:    bl fmodf969; CHECK-GI-NEXT:    fcvt s2, h8970; CHECK-GI-NEXT:    fcvt h0, s0971; CHECK-GI-NEXT:    fcvt s1, h11972; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill973; CHECK-GI-NEXT:    fmov s0, s2974; CHECK-GI-NEXT:    bl fmodf975; CHECK-GI-NEXT:    fcvt s2, h9976; CHECK-GI-NEXT:    fcvt h0, s0977; CHECK-GI-NEXT:    fcvt s1, h12978; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill979; CHECK-GI-NEXT:    fmov s0, s2980; CHECK-GI-NEXT:    bl fmodf981; CHECK-GI-NEXT:    fcvt s2, h10982; CHECK-GI-NEXT:    fcvt h0, s0983; CHECK-GI-NEXT:    fcvt s1, h13984; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill985; CHECK-GI-NEXT:    fmov s0, s2986; CHECK-GI-NEXT:    bl fmodf987; CHECK-GI-NEXT:    ldp q3, q2, [sp] // 32-byte Folded Reload988; CHECK-GI-NEXT:    fcvt h0, s0989; CHECK-GI-NEXT:    ldr q1, [sp, #32] // 16-byte Reload990; CHECK-GI-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload991; CHECK-GI-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload992; CHECK-GI-NEXT:    ldr x30, [sp, #96] // 8-byte Reload993; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]994; CHECK-GI-NEXT:    ldp d13, d12, [sp, #48] // 16-byte Folded Reload995; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]996; CHECK-GI-NEXT:    mov v1.h[3], v0.h[0]997; CHECK-GI-NEXT:    mov v0.16b, v1.16b998; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0999; CHECK-GI-NEXT:    add sp, sp, #1121000; CHECK-GI-NEXT:    ret1001entry:1002  %c = frem <4 x half> %a, %b1003  ret <4 x half> %c1004}1005 1006define <8 x half> @frem_v8f16(<8 x half> %a, <8 x half> %b) {1007; CHECK-SD-LABEL: frem_v8f16:1008; CHECK-SD:       // %bb.0: // %entry1009; CHECK-SD-NEXT:    sub sp, sp, #641010; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill1011; CHECK-SD-NEXT:    .cfi_def_cfa_offset 641012; CHECK-SD-NEXT:    .cfi_offset w30, -161013; CHECK-SD-NEXT:    mov h3, v0.h[1]1014; CHECK-SD-NEXT:    mov h2, v1.h[1]1015; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill1016; CHECK-SD-NEXT:    fcvt s0, h31017; CHECK-SD-NEXT:    fcvt s1, h21018; CHECK-SD-NEXT:    bl fmodf1019; CHECK-SD-NEXT:    fcvt h0, s01020; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill1021; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1022; CHECK-SD-NEXT:    fcvt s0, h01023; CHECK-SD-NEXT:    fcvt s1, h11024; CHECK-SD-NEXT:    bl fmodf1025; CHECK-SD-NEXT:    fcvt h0, s01026; CHECK-SD-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload1027; CHECK-SD-NEXT:    mov h1, v1.h[2]1028; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]1029; CHECK-SD-NEXT:    fcvt s1, h11030; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill1031; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1032; CHECK-SD-NEXT:    mov h0, v0.h[2]1033; CHECK-SD-NEXT:    fcvt s0, h01034; CHECK-SD-NEXT:    bl fmodf1035; CHECK-SD-NEXT:    fcvt h0, s01036; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1037; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1038; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1039; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1040; CHECK-SD-NEXT:    mov h0, v0.h[3]1041; CHECK-SD-NEXT:    mov h1, v1.h[3]1042; CHECK-SD-NEXT:    fcvt s0, h01043; CHECK-SD-NEXT:    fcvt s1, h11044; CHECK-SD-NEXT:    bl fmodf1045; CHECK-SD-NEXT:    fcvt h0, s01046; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1047; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1048; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1049; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1050; CHECK-SD-NEXT:    mov h0, v0.h[4]1051; CHECK-SD-NEXT:    mov h1, v1.h[4]1052; CHECK-SD-NEXT:    fcvt s0, h01053; CHECK-SD-NEXT:    fcvt s1, h11054; CHECK-SD-NEXT:    bl fmodf1055; CHECK-SD-NEXT:    fcvt h0, s01056; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1057; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1058; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1059; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1060; CHECK-SD-NEXT:    mov h0, v0.h[5]1061; CHECK-SD-NEXT:    mov h1, v1.h[5]1062; CHECK-SD-NEXT:    fcvt s0, h01063; CHECK-SD-NEXT:    fcvt s1, h11064; CHECK-SD-NEXT:    bl fmodf1065; CHECK-SD-NEXT:    fcvt h0, s01066; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1067; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1068; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1069; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1070; CHECK-SD-NEXT:    mov h0, v0.h[6]1071; CHECK-SD-NEXT:    mov h1, v1.h[6]1072; CHECK-SD-NEXT:    fcvt s0, h01073; CHECK-SD-NEXT:    fcvt s1, h11074; CHECK-SD-NEXT:    bl fmodf1075; CHECK-SD-NEXT:    fcvt h0, s01076; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1077; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1078; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1079; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1080; CHECK-SD-NEXT:    mov h0, v0.h[7]1081; CHECK-SD-NEXT:    mov h1, v1.h[7]1082; CHECK-SD-NEXT:    fcvt s0, h01083; CHECK-SD-NEXT:    fcvt s1, h11084; CHECK-SD-NEXT:    bl fmodf1085; CHECK-SD-NEXT:    fcvt h1, s01086; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1087; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1088; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]1089; CHECK-SD-NEXT:    add sp, sp, #641090; CHECK-SD-NEXT:    ret1091;1092; CHECK-GI-LABEL: frem_v8f16:1093; CHECK-GI:       // %bb.0: // %entry1094; CHECK-GI-NEXT:    sub sp, sp, #1921095; CHECK-GI-NEXT:    stp d15, d14, [sp, #112] // 16-byte Folded Spill1096; CHECK-GI-NEXT:    stp d13, d12, [sp, #128] // 16-byte Folded Spill1097; CHECK-GI-NEXT:    stp d11, d10, [sp, #144] // 16-byte Folded Spill1098; CHECK-GI-NEXT:    stp d9, d8, [sp, #160] // 16-byte Folded Spill1099; CHECK-GI-NEXT:    str x30, [sp, #176] // 8-byte Spill1100; CHECK-GI-NEXT:    .cfi_def_cfa_offset 1921101; CHECK-GI-NEXT:    .cfi_offset w30, -161102; CHECK-GI-NEXT:    .cfi_offset b8, -241103; CHECK-GI-NEXT:    .cfi_offset b9, -321104; CHECK-GI-NEXT:    .cfi_offset b10, -401105; CHECK-GI-NEXT:    .cfi_offset b11, -481106; CHECK-GI-NEXT:    .cfi_offset b12, -561107; CHECK-GI-NEXT:    .cfi_offset b13, -641108; CHECK-GI-NEXT:    .cfi_offset b14, -721109; CHECK-GI-NEXT:    .cfi_offset b15, -801110; CHECK-GI-NEXT:    mov h2, v0.h[5]1111; CHECK-GI-NEXT:    mov h11, v0.h[1]1112; CHECK-GI-NEXT:    mov h12, v0.h[2]1113; CHECK-GI-NEXT:    mov h13, v0.h[3]1114; CHECK-GI-NEXT:    mov h14, v0.h[4]1115; CHECK-GI-NEXT:    mov h8, v1.h[1]1116; CHECK-GI-NEXT:    mov h9, v1.h[2]1117; CHECK-GI-NEXT:    mov h10, v1.h[3]1118; CHECK-GI-NEXT:    mov h15, v1.h[4]1119; CHECK-GI-NEXT:    str h2, [sp, #48] // 2-byte Spill1120; CHECK-GI-NEXT:    mov h2, v0.h[6]1121; CHECK-GI-NEXT:    str h2, [sp, #64] // 2-byte Spill1122; CHECK-GI-NEXT:    mov h2, v0.h[7]1123; CHECK-GI-NEXT:    fcvt s0, h01124; CHECK-GI-NEXT:    str h2, [sp, #96] // 2-byte Spill1125; CHECK-GI-NEXT:    mov h2, v1.h[5]1126; CHECK-GI-NEXT:    str h2, [sp, #186] // 2-byte Spill1127; CHECK-GI-NEXT:    mov h2, v1.h[6]1128; CHECK-GI-NEXT:    str h2, [sp, #188] // 2-byte Spill1129; CHECK-GI-NEXT:    mov h2, v1.h[7]1130; CHECK-GI-NEXT:    fcvt s1, h11131; CHECK-GI-NEXT:    str h2, [sp, #190] // 2-byte Spill1132; CHECK-GI-NEXT:    bl fmodf1133; CHECK-GI-NEXT:    fcvt s2, h111134; CHECK-GI-NEXT:    fcvt h0, s01135; CHECK-GI-NEXT:    fcvt s1, h81136; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1137; CHECK-GI-NEXT:    fmov s0, s21138; CHECK-GI-NEXT:    bl fmodf1139; CHECK-GI-NEXT:    fcvt s2, h121140; CHECK-GI-NEXT:    fcvt h0, s01141; CHECK-GI-NEXT:    fcvt s1, h91142; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1143; CHECK-GI-NEXT:    fmov s0, s21144; CHECK-GI-NEXT:    bl fmodf1145; CHECK-GI-NEXT:    fcvt s2, h131146; CHECK-GI-NEXT:    fcvt h0, s01147; CHECK-GI-NEXT:    fcvt s1, h101148; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1149; CHECK-GI-NEXT:    fmov s0, s21150; CHECK-GI-NEXT:    bl fmodf1151; CHECK-GI-NEXT:    fcvt s2, h141152; CHECK-GI-NEXT:    fcvt h0, s01153; CHECK-GI-NEXT:    fcvt s1, h151154; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1155; CHECK-GI-NEXT:    fmov s0, s21156; CHECK-GI-NEXT:    bl fmodf1157; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload1158; CHECK-GI-NEXT:    fcvt h0, s01159; CHECK-GI-NEXT:    fcvt s2, h11160; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1161; CHECK-GI-NEXT:    ldr h0, [sp, #186] // 2-byte Reload1162; CHECK-GI-NEXT:    fcvt s1, h01163; CHECK-GI-NEXT:    fmov s0, s21164; CHECK-GI-NEXT:    bl fmodf1165; CHECK-GI-NEXT:    ldr h1, [sp, #64] // 2-byte Reload1166; CHECK-GI-NEXT:    fcvt h0, s01167; CHECK-GI-NEXT:    fcvt s2, h11168; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill1169; CHECK-GI-NEXT:    ldr h0, [sp, #188] // 2-byte Reload1170; CHECK-GI-NEXT:    fcvt s1, h01171; CHECK-GI-NEXT:    fmov s0, s21172; CHECK-GI-NEXT:    bl fmodf1173; CHECK-GI-NEXT:    ldr h1, [sp, #96] // 2-byte Reload1174; CHECK-GI-NEXT:    fcvt h0, s01175; CHECK-GI-NEXT:    fcvt s2, h11176; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill1177; CHECK-GI-NEXT:    ldr h0, [sp, #190] // 2-byte Reload1178; CHECK-GI-NEXT:    fcvt s1, h01179; CHECK-GI-NEXT:    fmov s0, s21180; CHECK-GI-NEXT:    bl fmodf1181; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload1182; CHECK-GI-NEXT:    fcvt h0, s01183; CHECK-GI-NEXT:    ldr q1, [sp, #80] // 16-byte Reload1184; CHECK-GI-NEXT:    ldp d9, d8, [sp, #160] // 16-byte Folded Reload1185; CHECK-GI-NEXT:    ldp d11, d10, [sp, #144] // 16-byte Folded Reload1186; CHECK-GI-NEXT:    ldr x30, [sp, #176] // 8-byte Reload1187; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]1188; CHECK-GI-NEXT:    ldp d13, d12, [sp, #128] // 16-byte Folded Reload1189; CHECK-GI-NEXT:    ldp d15, d14, [sp, #112] // 16-byte Folded Reload1190; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1191; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload1192; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]1193; CHECK-GI-NEXT:    ldp q3, q2, [sp, #48] // 32-byte Folded Reload1194; CHECK-GI-NEXT:    mov v1.h[4], v3.h[0]1195; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]1196; CHECK-GI-NEXT:    ldr q2, [sp, #96] // 16-byte Reload1197; CHECK-GI-NEXT:    mov v1.h[6], v2.h[0]1198; CHECK-GI-NEXT:    mov v1.h[7], v0.h[0]1199; CHECK-GI-NEXT:    mov v0.16b, v1.16b1200; CHECK-GI-NEXT:    add sp, sp, #1921201; CHECK-GI-NEXT:    ret1202entry:1203  %c = frem <8 x half> %a, %b1204  ret <8 x half> %c1205}1206 1207define <16 x half> @frem_v16f16(<16 x half> %a, <16 x half> %b) {1208; CHECK-SD-LABEL: frem_v16f16:1209; CHECK-SD:       // %bb.0: // %entry1210; CHECK-SD-NEXT:    sub sp, sp, #961211; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Spill1212; CHECK-SD-NEXT:    .cfi_def_cfa_offset 961213; CHECK-SD-NEXT:    .cfi_offset w30, -161214; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill1215; CHECK-SD-NEXT:    mov h1, v2.h[1]1216; CHECK-SD-NEXT:    stp q3, q2, [sp, #32] // 32-byte Folded Spill1217; CHECK-SD-NEXT:    mov h3, v0.h[1]1218; CHECK-SD-NEXT:    fcvt s1, h11219; CHECK-SD-NEXT:    fcvt s0, h31220; CHECK-SD-NEXT:    bl fmodf1221; CHECK-SD-NEXT:    fcvt h0, s01222; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1223; CHECK-SD-NEXT:    fcvt s1, h11224; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill1225; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1226; CHECK-SD-NEXT:    fcvt s0, h01227; CHECK-SD-NEXT:    bl fmodf1228; CHECK-SD-NEXT:    fcvt h0, s01229; CHECK-SD-NEXT:    ldp q1, q2, [sp, #48] // 32-byte Folded Reload1230; CHECK-SD-NEXT:    mov h1, v1.h[2]1231; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]1232; CHECK-SD-NEXT:    fcvt s1, h11233; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill1234; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1235; CHECK-SD-NEXT:    mov h0, v0.h[2]1236; CHECK-SD-NEXT:    fcvt s0, h01237; CHECK-SD-NEXT:    bl fmodf1238; CHECK-SD-NEXT:    fcvt h0, s01239; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1240; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1241; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1242; CHECK-SD-NEXT:    mov h0, v0.h[3]1243; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1244; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1245; CHECK-SD-NEXT:    mov h1, v1.h[3]1246; CHECK-SD-NEXT:    fcvt s0, h01247; CHECK-SD-NEXT:    fcvt s1, h11248; CHECK-SD-NEXT:    bl fmodf1249; CHECK-SD-NEXT:    fcvt h0, s01250; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1251; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1252; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1253; CHECK-SD-NEXT:    mov h0, v0.h[4]1254; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1255; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1256; CHECK-SD-NEXT:    mov h1, v1.h[4]1257; CHECK-SD-NEXT:    fcvt s0, h01258; CHECK-SD-NEXT:    fcvt s1, h11259; CHECK-SD-NEXT:    bl fmodf1260; CHECK-SD-NEXT:    fcvt h0, s01261; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1262; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1263; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1264; CHECK-SD-NEXT:    mov h0, v0.h[5]1265; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1266; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1267; CHECK-SD-NEXT:    mov h1, v1.h[5]1268; CHECK-SD-NEXT:    fcvt s0, h01269; CHECK-SD-NEXT:    fcvt s1, h11270; CHECK-SD-NEXT:    bl fmodf1271; CHECK-SD-NEXT:    fcvt h0, s01272; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1273; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1274; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1275; CHECK-SD-NEXT:    mov h0, v0.h[6]1276; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1277; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1278; CHECK-SD-NEXT:    mov h1, v1.h[6]1279; CHECK-SD-NEXT:    fcvt s0, h01280; CHECK-SD-NEXT:    fcvt s1, h11281; CHECK-SD-NEXT:    bl fmodf1282; CHECK-SD-NEXT:    fcvt h0, s01283; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1284; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1285; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1286; CHECK-SD-NEXT:    mov h0, v0.h[7]1287; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1288; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1289; CHECK-SD-NEXT:    mov h1, v1.h[7]1290; CHECK-SD-NEXT:    fcvt s0, h01291; CHECK-SD-NEXT:    fcvt s1, h11292; CHECK-SD-NEXT:    bl fmodf1293; CHECK-SD-NEXT:    fcvt h0, s01294; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1295; CHECK-SD-NEXT:    mov v1.h[7], v0.h[0]1296; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1297; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1298; CHECK-SD-NEXT:    mov h0, v0.h[1]1299; CHECK-SD-NEXT:    mov h1, v1.h[1]1300; CHECK-SD-NEXT:    fcvt s0, h01301; CHECK-SD-NEXT:    fcvt s1, h11302; CHECK-SD-NEXT:    bl fmodf1303; CHECK-SD-NEXT:    fcvt h0, s01304; CHECK-SD-NEXT:    str q0, [sp, #48] // 16-byte Spill1305; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1306; CHECK-SD-NEXT:    fcvt s0, h01307; CHECK-SD-NEXT:    fcvt s1, h11308; CHECK-SD-NEXT:    bl fmodf1309; CHECK-SD-NEXT:    fcvt h0, s01310; CHECK-SD-NEXT:    ldp q1, q2, [sp, #32] // 32-byte Folded Reload1311; CHECK-SD-NEXT:    mov h1, v1.h[2]1312; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]1313; CHECK-SD-NEXT:    fcvt s1, h11314; CHECK-SD-NEXT:    str q0, [sp, #48] // 16-byte Spill1315; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1316; CHECK-SD-NEXT:    mov h0, v0.h[2]1317; CHECK-SD-NEXT:    fcvt s0, h01318; CHECK-SD-NEXT:    bl fmodf1319; CHECK-SD-NEXT:    fcvt h0, s01320; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1321; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1322; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1323; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1324; CHECK-SD-NEXT:    mov h0, v0.h[3]1325; CHECK-SD-NEXT:    mov h1, v1.h[3]1326; CHECK-SD-NEXT:    fcvt s0, h01327; CHECK-SD-NEXT:    fcvt s1, h11328; CHECK-SD-NEXT:    bl fmodf1329; CHECK-SD-NEXT:    fcvt h0, s01330; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1331; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1332; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1333; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1334; CHECK-SD-NEXT:    mov h0, v0.h[4]1335; CHECK-SD-NEXT:    mov h1, v1.h[4]1336; CHECK-SD-NEXT:    fcvt s0, h01337; CHECK-SD-NEXT:    fcvt s1, h11338; CHECK-SD-NEXT:    bl fmodf1339; CHECK-SD-NEXT:    fcvt h0, s01340; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1341; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1342; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1343; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1344; CHECK-SD-NEXT:    mov h0, v0.h[5]1345; CHECK-SD-NEXT:    mov h1, v1.h[5]1346; CHECK-SD-NEXT:    fcvt s0, h01347; CHECK-SD-NEXT:    fcvt s1, h11348; CHECK-SD-NEXT:    bl fmodf1349; CHECK-SD-NEXT:    fcvt h0, s01350; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1351; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1352; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1353; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1354; CHECK-SD-NEXT:    mov h0, v0.h[6]1355; CHECK-SD-NEXT:    mov h1, v1.h[6]1356; CHECK-SD-NEXT:    fcvt s0, h01357; CHECK-SD-NEXT:    fcvt s1, h11358; CHECK-SD-NEXT:    bl fmodf1359; CHECK-SD-NEXT:    fcvt h0, s01360; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1361; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1362; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1363; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1364; CHECK-SD-NEXT:    mov h0, v0.h[7]1365; CHECK-SD-NEXT:    mov h1, v1.h[7]1366; CHECK-SD-NEXT:    fcvt s0, h01367; CHECK-SD-NEXT:    fcvt s1, h11368; CHECK-SD-NEXT:    bl fmodf1369; CHECK-SD-NEXT:    fmov s1, s01370; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Reload1371; CHECK-SD-NEXT:    fcvt h2, s11372; CHECK-SD-NEXT:    ldp q1, q0, [sp, #48] // 32-byte Folded Reload1373; CHECK-SD-NEXT:    mov v1.h[7], v2.h[0]1374; CHECK-SD-NEXT:    add sp, sp, #961375; CHECK-SD-NEXT:    ret1376;1377; CHECK-GI-LABEL: frem_v16f16:1378; CHECK-GI:       // %bb.0: // %entry1379; CHECK-GI-NEXT:    sub sp, sp, #4481380; CHECK-GI-NEXT:    stp d15, d14, [sp, #368] // 16-byte Folded Spill1381; CHECK-GI-NEXT:    stp d13, d12, [sp, #384] // 16-byte Folded Spill1382; CHECK-GI-NEXT:    stp d11, d10, [sp, #400] // 16-byte Folded Spill1383; CHECK-GI-NEXT:    stp d9, d8, [sp, #416] // 16-byte Folded Spill1384; CHECK-GI-NEXT:    stp x29, x30, [sp, #432] // 16-byte Folded Spill1385; CHECK-GI-NEXT:    .cfi_def_cfa_offset 4481386; CHECK-GI-NEXT:    .cfi_offset w30, -81387; CHECK-GI-NEXT:    .cfi_offset w29, -161388; CHECK-GI-NEXT:    .cfi_offset b8, -241389; CHECK-GI-NEXT:    .cfi_offset b9, -321390; CHECK-GI-NEXT:    .cfi_offset b10, -401391; CHECK-GI-NEXT:    .cfi_offset b11, -481392; CHECK-GI-NEXT:    .cfi_offset b12, -561393; CHECK-GI-NEXT:    .cfi_offset b13, -641394; CHECK-GI-NEXT:    .cfi_offset b14, -721395; CHECK-GI-NEXT:    .cfi_offset b15, -801396; CHECK-GI-NEXT:    mov v4.16b, v1.16b1397; CHECK-GI-NEXT:    str q1, [sp, #112] // 16-byte Spill1398; CHECK-GI-NEXT:    mov h1, v0.h[4]1399; CHECK-GI-NEXT:    mov h12, v0.h[1]1400; CHECK-GI-NEXT:    mov h13, v0.h[2]1401; CHECK-GI-NEXT:    str q3, [sp, #16] // 16-byte Spill1402; CHECK-GI-NEXT:    mov h14, v0.h[3]1403; CHECK-GI-NEXT:    mov h15, v2.h[1]1404; CHECK-GI-NEXT:    mov h8, v2.h[2]1405; CHECK-GI-NEXT:    mov h9, v2.h[3]1406; CHECK-GI-NEXT:    mov h10, v2.h[4]1407; CHECK-GI-NEXT:    mov h11, v2.h[5]1408; CHECK-GI-NEXT:    str h1, [sp, #272] // 2-byte Spill1409; CHECK-GI-NEXT:    mov h1, v0.h[5]1410; CHECK-GI-NEXT:    str h1, [sp, #240] // 2-byte Spill1411; CHECK-GI-NEXT:    mov h1, v0.h[6]1412; CHECK-GI-NEXT:    str h1, [sp, #176] // 2-byte Spill1413; CHECK-GI-NEXT:    mov h1, v0.h[7]1414; CHECK-GI-NEXT:    fcvt s0, h01415; CHECK-GI-NEXT:    str h1, [sp, #144] // 2-byte Spill1416; CHECK-GI-NEXT:    mov h1, v4.h[1]1417; CHECK-GI-NEXT:    str h1, [sp, #48] // 2-byte Spill1418; CHECK-GI-NEXT:    mov h1, v4.h[2]1419; CHECK-GI-NEXT:    str h1, [sp, #80] // 2-byte Spill1420; CHECK-GI-NEXT:    mov h1, v4.h[3]1421; CHECK-GI-NEXT:    str h1, [sp, #128] // 2-byte Spill1422; CHECK-GI-NEXT:    mov h1, v4.h[4]1423; CHECK-GI-NEXT:    str h1, [sp, #192] // 2-byte Spill1424; CHECK-GI-NEXT:    mov h1, v4.h[5]1425; CHECK-GI-NEXT:    str h1, [sp, #256] // 2-byte Spill1426; CHECK-GI-NEXT:    mov h1, v4.h[6]1427; CHECK-GI-NEXT:    str h1, [sp, #336] // 2-byte Spill1428; CHECK-GI-NEXT:    mov h1, v4.h[7]1429; CHECK-GI-NEXT:    str h1, [sp, #352] // 2-byte Spill1430; CHECK-GI-NEXT:    mov h1, v2.h[6]1431; CHECK-GI-NEXT:    str h1, [sp, #12] // 2-byte Spill1432; CHECK-GI-NEXT:    mov h1, v2.h[7]1433; CHECK-GI-NEXT:    str h1, [sp, #14] // 2-byte Spill1434; CHECK-GI-NEXT:    mov h1, v3.h[1]1435; CHECK-GI-NEXT:    str h1, [sp, #44] // 2-byte Spill1436; CHECK-GI-NEXT:    mov h1, v3.h[2]1437; CHECK-GI-NEXT:    str h1, [sp, #46] // 2-byte Spill1438; CHECK-GI-NEXT:    mov h1, v3.h[3]1439; CHECK-GI-NEXT:    str h1, [sp, #78] // 2-byte Spill1440; CHECK-GI-NEXT:    mov h1, v3.h[4]1441; CHECK-GI-NEXT:    str h1, [sp, #110] // 2-byte Spill1442; CHECK-GI-NEXT:    mov h1, v3.h[5]1443; CHECK-GI-NEXT:    str h1, [sp, #174] // 2-byte Spill1444; CHECK-GI-NEXT:    mov h1, v3.h[6]1445; CHECK-GI-NEXT:    str h1, [sp, #238] // 2-byte Spill1446; CHECK-GI-NEXT:    mov h1, v3.h[7]1447; CHECK-GI-NEXT:    str h1, [sp, #302] // 2-byte Spill1448; CHECK-GI-NEXT:    fcvt s1, h21449; CHECK-GI-NEXT:    bl fmodf1450; CHECK-GI-NEXT:    fcvt s2, h121451; CHECK-GI-NEXT:    fcvt h0, s01452; CHECK-GI-NEXT:    fcvt s1, h151453; CHECK-GI-NEXT:    str q0, [sp, #304] // 16-byte Spill1454; CHECK-GI-NEXT:    fmov s0, s21455; CHECK-GI-NEXT:    bl fmodf1456; CHECK-GI-NEXT:    fcvt s2, h131457; CHECK-GI-NEXT:    fcvt h0, s01458; CHECK-GI-NEXT:    fcvt s1, h81459; CHECK-GI-NEXT:    str q0, [sp, #208] // 16-byte Spill1460; CHECK-GI-NEXT:    fmov s0, s21461; CHECK-GI-NEXT:    bl fmodf1462; CHECK-GI-NEXT:    fcvt s2, h141463; CHECK-GI-NEXT:    fcvt h0, s01464; CHECK-GI-NEXT:    fcvt s1, h91465; CHECK-GI-NEXT:    str q0, [sp, #320] // 16-byte Spill1466; CHECK-GI-NEXT:    fmov s0, s21467; CHECK-GI-NEXT:    bl fmodf1468; CHECK-GI-NEXT:    ldr h1, [sp, #272] // 2-byte Reload1469; CHECK-GI-NEXT:    fcvt h0, s01470; CHECK-GI-NEXT:    fcvt s2, h11471; CHECK-GI-NEXT:    fcvt s1, h101472; CHECK-GI-NEXT:    str q0, [sp, #272] // 16-byte Spill1473; CHECK-GI-NEXT:    fmov s0, s21474; CHECK-GI-NEXT:    bl fmodf1475; CHECK-GI-NEXT:    ldr h1, [sp, #240] // 2-byte Reload1476; CHECK-GI-NEXT:    fcvt h0, s01477; CHECK-GI-NEXT:    fcvt s2, h11478; CHECK-GI-NEXT:    fcvt s1, h111479; CHECK-GI-NEXT:    str q0, [sp, #240] // 16-byte Spill1480; CHECK-GI-NEXT:    fmov s0, s21481; CHECK-GI-NEXT:    bl fmodf1482; CHECK-GI-NEXT:    ldr h1, [sp, #176] // 2-byte Reload1483; CHECK-GI-NEXT:    fcvt h0, s01484; CHECK-GI-NEXT:    fcvt s2, h11485; CHECK-GI-NEXT:    str q0, [sp, #176] // 16-byte Spill1486; CHECK-GI-NEXT:    ldr h0, [sp, #12] // 2-byte Reload1487; CHECK-GI-NEXT:    fcvt s1, h01488; CHECK-GI-NEXT:    fmov s0, s21489; CHECK-GI-NEXT:    bl fmodf1490; CHECK-GI-NEXT:    ldr h1, [sp, #144] // 2-byte Reload1491; CHECK-GI-NEXT:    fcvt h0, s01492; CHECK-GI-NEXT:    fcvt s2, h11493; CHECK-GI-NEXT:    str q0, [sp, #144] // 16-byte Spill1494; CHECK-GI-NEXT:    ldr h0, [sp, #14] // 2-byte Reload1495; CHECK-GI-NEXT:    fcvt s1, h01496; CHECK-GI-NEXT:    fmov s0, s21497; CHECK-GI-NEXT:    bl fmodf1498; CHECK-GI-NEXT:    ldr q1, [sp, #112] // 16-byte Reload1499; CHECK-GI-NEXT:    fcvt h0, s01500; CHECK-GI-NEXT:    fcvt s2, h11501; CHECK-GI-NEXT:    str q0, [sp, #112] // 16-byte Spill1502; CHECK-GI-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1503; CHECK-GI-NEXT:    fcvt s1, h01504; CHECK-GI-NEXT:    fmov s0, s21505; CHECK-GI-NEXT:    bl fmodf1506; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload1507; CHECK-GI-NEXT:    fcvt h0, s01508; CHECK-GI-NEXT:    fcvt s2, h11509; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1510; CHECK-GI-NEXT:    ldr h0, [sp, #44] // 2-byte Reload1511; CHECK-GI-NEXT:    fcvt s1, h01512; CHECK-GI-NEXT:    fmov s0, s21513; CHECK-GI-NEXT:    bl fmodf1514; CHECK-GI-NEXT:    ldr h1, [sp, #80] // 2-byte Reload1515; CHECK-GI-NEXT:    fcvt h0, s01516; CHECK-GI-NEXT:    fcvt s2, h11517; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1518; CHECK-GI-NEXT:    ldr h0, [sp, #46] // 2-byte Reload1519; CHECK-GI-NEXT:    fcvt s1, h01520; CHECK-GI-NEXT:    fmov s0, s21521; CHECK-GI-NEXT:    bl fmodf1522; CHECK-GI-NEXT:    ldr h1, [sp, #128] // 2-byte Reload1523; CHECK-GI-NEXT:    fcvt h0, s01524; CHECK-GI-NEXT:    fcvt s2, h11525; CHECK-GI-NEXT:    str q0, [sp, #128] // 16-byte Spill1526; CHECK-GI-NEXT:    ldr h0, [sp, #78] // 2-byte Reload1527; CHECK-GI-NEXT:    fcvt s1, h01528; CHECK-GI-NEXT:    fmov s0, s21529; CHECK-GI-NEXT:    bl fmodf1530; CHECK-GI-NEXT:    ldr h1, [sp, #192] // 2-byte Reload1531; CHECK-GI-NEXT:    fcvt h0, s01532; CHECK-GI-NEXT:    fcvt s2, h11533; CHECK-GI-NEXT:    str q0, [sp, #192] // 16-byte Spill1534; CHECK-GI-NEXT:    ldr h0, [sp, #110] // 2-byte Reload1535; CHECK-GI-NEXT:    fcvt s1, h01536; CHECK-GI-NEXT:    fmov s0, s21537; CHECK-GI-NEXT:    bl fmodf1538; CHECK-GI-NEXT:    ldr h1, [sp, #256] // 2-byte Reload1539; CHECK-GI-NEXT:    fcvt h0, s01540; CHECK-GI-NEXT:    fcvt s2, h11541; CHECK-GI-NEXT:    str q0, [sp, #256] // 16-byte Spill1542; CHECK-GI-NEXT:    ldr h0, [sp, #174] // 2-byte Reload1543; CHECK-GI-NEXT:    fcvt s1, h01544; CHECK-GI-NEXT:    fmov s0, s21545; CHECK-GI-NEXT:    bl fmodf1546; CHECK-GI-NEXT:    ldr h1, [sp, #336] // 2-byte Reload1547; CHECK-GI-NEXT:    fcvt h0, s01548; CHECK-GI-NEXT:    fcvt s2, h11549; CHECK-GI-NEXT:    str q0, [sp, #336] // 16-byte Spill1550; CHECK-GI-NEXT:    ldr h0, [sp, #238] // 2-byte Reload1551; CHECK-GI-NEXT:    fcvt s1, h01552; CHECK-GI-NEXT:    fmov s0, s21553; CHECK-GI-NEXT:    bl fmodf1554; CHECK-GI-NEXT:    ldr h1, [sp, #352] // 2-byte Reload1555; CHECK-GI-NEXT:    fcvt h0, s01556; CHECK-GI-NEXT:    fcvt s2, h11557; CHECK-GI-NEXT:    str q0, [sp, #352] // 16-byte Spill1558; CHECK-GI-NEXT:    ldr h0, [sp, #302] // 2-byte Reload1559; CHECK-GI-NEXT:    fcvt s1, h01560; CHECK-GI-NEXT:    fmov s0, s21561; CHECK-GI-NEXT:    bl fmodf1562; CHECK-GI-NEXT:    ldr q3, [sp, #304] // 16-byte Reload1563; CHECK-GI-NEXT:    ldr q2, [sp, #208] // 16-byte Reload1564; CHECK-GI-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1565; CHECK-GI-NEXT:    ldp x29, x30, [sp, #432] // 16-byte Folded Reload1566; CHECK-GI-NEXT:    mov v3.h[1], v2.h[0]1567; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload1568; CHECK-GI-NEXT:    ldp d9, d8, [sp, #416] // 16-byte Folded Reload1569; CHECK-GI-NEXT:    mov v1.h[1], v2.h[0]1570; CHECK-GI-NEXT:    ldr q2, [sp, #320] // 16-byte Reload1571; CHECK-GI-NEXT:    ldp d11, d10, [sp, #400] // 16-byte Folded Reload1572; CHECK-GI-NEXT:    mov v3.h[2], v2.h[0]1573; CHECK-GI-NEXT:    ldr q2, [sp, #128] // 16-byte Reload1574; CHECK-GI-NEXT:    ldp d13, d12, [sp, #384] // 16-byte Folded Reload1575; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1576; CHECK-GI-NEXT:    ldr q2, [sp, #272] // 16-byte Reload1577; CHECK-GI-NEXT:    ldp d15, d14, [sp, #368] // 16-byte Folded Reload1578; CHECK-GI-NEXT:    mov v3.h[3], v2.h[0]1579; CHECK-GI-NEXT:    ldr q2, [sp, #192] // 16-byte Reload1580; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]1581; CHECK-GI-NEXT:    ldp q4, q2, [sp, #240] // 32-byte Folded Reload1582; CHECK-GI-NEXT:    mov v3.h[4], v4.h[0]1583; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]1584; CHECK-GI-NEXT:    ldr q2, [sp, #176] // 16-byte Reload1585; CHECK-GI-NEXT:    mov v3.h[5], v2.h[0]1586; CHECK-GI-NEXT:    ldr q2, [sp, #336] // 16-byte Reload1587; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]1588; CHECK-GI-NEXT:    fcvt h2, s01589; CHECK-GI-NEXT:    ldr q0, [sp, #144] // 16-byte Reload1590; CHECK-GI-NEXT:    mov v3.h[6], v0.h[0]1591; CHECK-GI-NEXT:    ldr q0, [sp, #352] // 16-byte Reload1592; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]1593; CHECK-GI-NEXT:    ldr q0, [sp, #112] // 16-byte Reload1594; CHECK-GI-NEXT:    mov v3.h[7], v0.h[0]1595; CHECK-GI-NEXT:    mov v1.h[7], v2.h[0]1596; CHECK-GI-NEXT:    mov v0.16b, v3.16b1597; CHECK-GI-NEXT:    add sp, sp, #4481598; CHECK-GI-NEXT:    ret1599entry:1600  %c = frem <16 x half> %a, %b1601  ret <16 x half> %c1602}1603 1604define <2 x fp128> @frem_v2fp128(<2 x fp128> %a, <2 x fp128> %b) {1605; CHECK-SD-LABEL: frem_v2fp128:1606; CHECK-SD:       // %bb.0: // %entry1607; CHECK-SD-NEXT:    sub sp, sp, #641608; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill1609; CHECK-SD-NEXT:    .cfi_def_cfa_offset 641610; CHECK-SD-NEXT:    .cfi_offset w30, -161611; CHECK-SD-NEXT:    stp q1, q3, [sp, #16] // 32-byte Folded Spill1612; CHECK-SD-NEXT:    mov v1.16b, v2.16b1613; CHECK-SD-NEXT:    bl fmodl1614; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1615; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1616; CHECK-SD-NEXT:    bl fmodl1617; CHECK-SD-NEXT:    mov v1.16b, v0.16b1618; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1619; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1620; CHECK-SD-NEXT:    add sp, sp, #641621; CHECK-SD-NEXT:    ret1622;1623; CHECK-GI-LABEL: frem_v2fp128:1624; CHECK-GI:       // %bb.0: // %entry1625; CHECK-GI-NEXT:    sub sp, sp, #641626; CHECK-GI-NEXT:    str x30, [sp, #48] // 8-byte Spill1627; CHECK-GI-NEXT:    .cfi_def_cfa_offset 641628; CHECK-GI-NEXT:    .cfi_offset w30, -161629; CHECK-GI-NEXT:    stp q3, q1, [sp, #16] // 32-byte Folded Spill1630; CHECK-GI-NEXT:    mov v1.16b, v2.16b1631; CHECK-GI-NEXT:    bl fmodl1632; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1633; CHECK-GI-NEXT:    ldp q1, q0, [sp, #16] // 32-byte Folded Reload1634; CHECK-GI-NEXT:    bl fmodl1635; CHECK-GI-NEXT:    mov v1.16b, v0.16b1636; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1637; CHECK-GI-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1638; CHECK-GI-NEXT:    add sp, sp, #641639; CHECK-GI-NEXT:    ret1640entry:1641  %c = frem <2 x fp128> %a, %b1642  ret <2 x fp128> %c1643}1644