brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · 2de20c2 Raw
267 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64 -mattr=+sve < %s -o - | FileCheck -check-prefixes=SVE,SVELINUX %s3; RUN: llc -mtriple=aarch64 -global-isel < %s -o - | FileCheck -check-prefixes=GISEL %s4; RUN: llc -mtriple=aarch64-windows-msvc -mattr=+sve < %s -o - | FileCheck -check-prefixes=SVE,SVEWINDOWS %s5; RUN: llc -mtriple=aarch64-windows-msvc < %s -o - | FileCheck -check-prefixes=WINDOWS %s6 7define double @testExp(double %val, i32 %a) {8; SVE-LABEL: testExp:9; SVE:       // %bb.0: // %entry10; SVE-NEXT:    // kill: def $w0 killed $w0 def $x011; SVE-NEXT:    sxtw x8, w012; SVE-NEXT:    ptrue p0.d13; SVE-NEXT:    // kill: def $d0 killed $d0 def $z014; SVE-NEXT:    fmov d1, x815; SVE-NEXT:    fscale z0.d, p0/m, z0.d, z1.d16; SVE-NEXT:    // kill: def $d0 killed $d0 killed $z017; SVE-NEXT:    ret18;19; GISEL-LABEL: testExp:20; GISEL:       // %bb.0: // %entry21; GISEL-NEXT:    b ldexp22;23; WINDOWS-LABEL: testExp:24; WINDOWS:       // %bb.0: // %entry25; WINDOWS-NEXT:    b ldexp26entry:27  %call = tail call fast double @ldexp(double %val, i32 %a)28  ret double %call29}30 31declare double @ldexp(double, i32) memory(none)32 33define double @testExpIntrinsic(double %val, i32 %a) {34; SVE-LABEL: testExpIntrinsic:35; SVE:       // %bb.0: // %entry36; SVE-NEXT:    // kill: def $w0 killed $w0 def $x037; SVE-NEXT:    sxtw x8, w038; SVE-NEXT:    ptrue p0.d39; SVE-NEXT:    // kill: def $d0 killed $d0 def $z040; SVE-NEXT:    fmov d1, x841; SVE-NEXT:    fscale z0.d, p0/m, z0.d, z1.d42; SVE-NEXT:    // kill: def $d0 killed $d0 killed $z043; SVE-NEXT:    ret44;45; GISEL-LABEL: testExpIntrinsic:46; GISEL:       // %bb.0: // %entry47; GISEL-NEXT:    b ldexp48;49; WINDOWS-LABEL: testExpIntrinsic:50; WINDOWS:       // %bb.0: // %entry51; WINDOWS-NEXT:    b ldexp52entry:53  %call = tail call fast double @llvm.ldexp.f64(double %val, i32 %a)54  ret double %call55}56 57define float @testExpf(float %val, i32 %a) {58; SVELINUX-LABEL: testExpf:59; SVELINUX:       // %bb.0: // %entry60; SVELINUX-NEXT:    fmov s1, w061; SVELINUX-NEXT:    ptrue p0.s62; SVELINUX-NEXT:    // kill: def $s0 killed $s0 def $z063; SVELINUX-NEXT:    fscale z0.s, p0/m, z0.s, z1.s64; SVELINUX-NEXT:    // kill: def $s0 killed $s0 killed $z065; SVELINUX-NEXT:    ret66;67; GISEL-LABEL: testExpf:68; GISEL:       // %bb.0: // %entry69; GISEL-NEXT:    b ldexpf70;71; SVEWINDOWS-LABEL: testExpf:72; SVEWINDOWS:       // %bb.0: // %entry73; SVEWINDOWS-NEXT:    b ldexpf74;75; WINDOWS-LABEL: testExpf:76; WINDOWS:       // %bb.0: // %entry77; WINDOWS-NEXT:    b ldexpf78entry:79  %call = tail call fast float @ldexpf(float %val, i32 %a)80  ret float %call81}82 83define float @testExpfIntrinsic(float %val, i32 %a) {84; SVE-LABEL: testExpfIntrinsic:85; SVE:       // %bb.0: // %entry86; SVE-NEXT:    fmov s1, w087; SVE-NEXT:    ptrue p0.s88; SVE-NEXT:    // kill: def $s0 killed $s0 def $z089; SVE-NEXT:    fscale z0.s, p0/m, z0.s, z1.s90; SVE-NEXT:    // kill: def $s0 killed $s0 killed $z091; SVE-NEXT:    ret92;93; GISEL-LABEL: testExpfIntrinsic:94; GISEL:       // %bb.0: // %entry95; GISEL-NEXT:    b ldexpf96;97; WINDOWS-LABEL: testExpfIntrinsic:98; WINDOWS:       .seh_proc testExpfIntrinsic99; WINDOWS-NEXT:  // %bb.0: // %entry100; WINDOWS-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill101; WINDOWS-NEXT:    .seh_save_reg_x x30, 16102; WINDOWS-NEXT:    .seh_endprologue103; WINDOWS-NEXT:    fcvt d0, s0104; WINDOWS-NEXT:    bl ldexp105; WINDOWS-NEXT:    fcvt s0, d0106; WINDOWS-NEXT:    .seh_startepilogue107; WINDOWS-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload108; WINDOWS-NEXT:    .seh_save_reg_x x30, 16109; WINDOWS-NEXT:    .seh_endepilogue110; WINDOWS-NEXT:    ret111; WINDOWS-NEXT:    .seh_endfunclet112; WINDOWS-NEXT:    .seh_endproc113entry:114  %call = tail call fast float @llvm.ldexp.f32(float %val, i32 %a)115  ret float %call116}117 118define <2 x float> @test_ldexp_v2f32_v2i32(<2 x float> %Val, <2 x i32> %Exp) {119; SVE-LABEL: test_ldexp_v2f32_v2i32:120; SVE:       // %bb.0:121; SVE-NEXT:    // kill: def $d1 killed $d1 def $z1122; SVE-NEXT:    mov w8, v1.s[1]123; SVE-NEXT:    // kill: def $d0 killed $d0 def $z0124; SVE-NEXT:    mov s2, v0.s[1]125; SVE-NEXT:    ptrue p0.s126; SVE-NEXT:    fscale z0.s, p0/m, z0.s, z1.s127; SVE-NEXT:    fmov s3, w8128; SVE-NEXT:    fscale z2.s, p0/m, z2.s, z3.s129; SVE-NEXT:    mov v0.s[1], v2.s[0]130; SVE-NEXT:    // kill: def $d0 killed $d0 killed $z0131; SVE-NEXT:    ret132;133; GISEL-LABEL: test_ldexp_v2f32_v2i32:134; GISEL:       // %bb.0:135; GISEL-NEXT:    sub sp, sp, #48136; GISEL-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill137; GISEL-NEXT:    str x30, [sp, #32] // 8-byte Spill138; GISEL-NEXT:    .cfi_def_cfa_offset 48139; GISEL-NEXT:    .cfi_offset w30, -16140; GISEL-NEXT:    .cfi_offset b8, -24141; GISEL-NEXT:    .cfi_offset b9, -32142; GISEL-NEXT:    // kill: def $d1 killed $d1 def $q1143; GISEL-NEXT:    fmov w0, s1144; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0145; GISEL-NEXT:    mov s8, v0.s[1]146; GISEL-NEXT:    mov s9, v1.s[1]147; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0148; GISEL-NEXT:    bl ldexpf149; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0150; GISEL-NEXT:    str q0, [sp] // 16-byte Spill151; GISEL-NEXT:    fmov w0, s9152; GISEL-NEXT:    fmov s0, s8153; GISEL-NEXT:    bl ldexpf154; GISEL-NEXT:    ldr q1, [sp] // 16-byte Reload155; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0156; GISEL-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload157; GISEL-NEXT:    ldr x30, [sp, #32] // 8-byte Reload158; GISEL-NEXT:    mov v1.s[1], v0.s[0]159; GISEL-NEXT:    fmov d0, d1160; GISEL-NEXT:    add sp, sp, #48161; GISEL-NEXT:    ret162;163; WINDOWS-LABEL: test_ldexp_v2f32_v2i32:164; WINDOWS:       .seh_proc test_ldexp_v2f32_v2i32165; WINDOWS-NEXT:  // %bb.0:166; WINDOWS-NEXT:    sub sp, sp, #48167; WINDOWS-NEXT:    .seh_stackalloc 48168; WINDOWS-NEXT:    str x30, [sp, #32] // 8-byte Spill169; WINDOWS-NEXT:    .seh_save_reg x30, 32170; WINDOWS-NEXT:    .seh_endprologue171; WINDOWS-NEXT:    // kill: def $d0 killed $d0 def $q0172; WINDOWS-NEXT:    mov s2, v0.s[1]173; WINDOWS-NEXT:    // kill: def $d1 killed $d1 def $q1174; WINDOWS-NEXT:    stp q1, q0, [sp] // 32-byte Folded Spill175; WINDOWS-NEXT:    mov w0, v1.s[1]176; WINDOWS-NEXT:    fcvt d0, s2177; WINDOWS-NEXT:    bl ldexp178; WINDOWS-NEXT:    ldr q1, [sp, #16] // 16-byte Reload179; WINDOWS-NEXT:    fcvt s0, d0180; WINDOWS-NEXT:    fcvt d1, s1181; WINDOWS-NEXT:    str q0, [sp, #16] // 16-byte Spill182; WINDOWS-NEXT:    ldr q0, [sp] // 16-byte Reload183; WINDOWS-NEXT:    fmov w0, s0184; WINDOWS-NEXT:    fmov d0, d1185; WINDOWS-NEXT:    bl ldexp186; WINDOWS-NEXT:    fcvt s0, d0187; WINDOWS-NEXT:    ldr q1, [sp, #16] // 16-byte Reload188; WINDOWS-NEXT:    mov v0.s[1], v1.s[0]189; WINDOWS-NEXT:    // kill: def $d0 killed $d0 killed $q0190; WINDOWS-NEXT:    .seh_startepilogue191; WINDOWS-NEXT:    ldr x30, [sp, #32] // 8-byte Reload192; WINDOWS-NEXT:    .seh_save_reg x30, 32193; WINDOWS-NEXT:    add sp, sp, #48194; WINDOWS-NEXT:    .seh_stackalloc 48195; WINDOWS-NEXT:    .seh_endepilogue196; WINDOWS-NEXT:    ret197; WINDOWS-NEXT:    .seh_endfunclet198; WINDOWS-NEXT:    .seh_endproc199  %result = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %Val, <2 x i32> %Exp)200  ret <2 x float> %result201}202 203declare float @ldexpf(float, i32) memory(none)204 205define fp128 @testExpl(fp128 %val, i32 %a) {206; SVE-LABEL: testExpl:207; SVE:       // %bb.0: // %entry208; SVE-NEXT:    b ldexpl209;210; GISEL-LABEL: testExpl:211; GISEL:       // %bb.0: // %entry212; GISEL-NEXT:    b ldexpl213;214; WINDOWS-LABEL: testExpl:215; WINDOWS:       // %bb.0: // %entry216; WINDOWS-NEXT:    b ldexpl217entry:218  %call = tail call fast fp128 @ldexpl(fp128 %val, i32 %a)219  ret fp128 %call220}221 222declare fp128 @ldexpl(fp128, i32) memory(none)223 224define half @testExpf16(half %val, i32 %a) {225; SVE-LABEL: testExpf16:226; SVE:       // %bb.0: // %entry227; SVE-NEXT:    fcvt s0, h0228; SVE-NEXT:    fmov s1, w0229; SVE-NEXT:    ptrue p0.s230; SVE-NEXT:    fscale z0.s, p0/m, z0.s, z1.s231; SVE-NEXT:    fcvt h0, s0232; SVE-NEXT:    ret233;234; GISEL-LABEL: testExpf16:235; GISEL:       // %bb.0: // %entry236; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill237; GISEL-NEXT:    .cfi_def_cfa_offset 16238; GISEL-NEXT:    .cfi_offset w30, -16239; GISEL-NEXT:    fcvt s0, h0240; GISEL-NEXT:    bl ldexpf241; GISEL-NEXT:    fcvt h0, s0242; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload243; GISEL-NEXT:    ret244;245; WINDOWS-LABEL: testExpf16:246; WINDOWS:       .seh_proc testExpf16247; WINDOWS-NEXT:  // %bb.0: // %entry248; WINDOWS-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill249; WINDOWS-NEXT:    .seh_save_reg_x x30, 16250; WINDOWS-NEXT:    .seh_endprologue251; WINDOWS-NEXT:    fcvt d0, h0252; WINDOWS-NEXT:    bl ldexp253; WINDOWS-NEXT:    fcvt h0, d0254; WINDOWS-NEXT:    .seh_startepilogue255; WINDOWS-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload256; WINDOWS-NEXT:    .seh_save_reg_x x30, 16257; WINDOWS-NEXT:    .seh_endepilogue258; WINDOWS-NEXT:    ret259; WINDOWS-NEXT:    .seh_endfunclet260; WINDOWS-NEXT:    .seh_endproc261entry:262  %0 = tail call fast half @llvm.ldexp.f16.i32(half %val, i32 %a)263  ret half %0264}265 266declare half @llvm.ldexp.f16.i32(half, i32) memory(none)267