137 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64-pc-windows-msvc19 -verify-machineinstrs %s -o - | FileCheck %s3; RUN: llc -mtriple=aarch64-pc-windows-msvc19 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - | FileCheck %s4 5define double @powi_f64(double %a, i32 %b) {6; CHECK-LABEL: powi_f64:7; CHECK: // %bb.0: // %entry8; CHECK-NEXT: scvtf d1, w09; CHECK-NEXT: b pow10entry:11 %c = call double @llvm.powi.f64.i32(double %a, i32 %b)12 ret double %c13}14 15define float @powi_f32(float %a, i32 %b) {16; CHECK-LABEL: powi_f32:17; CHECK: // %bb.0: // %entry18; CHECK-NEXT: scvtf s1, w019; CHECK-NEXT: b powf20entry:21 %c = call float @llvm.powi.f32.i32(float %a, i32 %b)22 ret float %c23}24 25define half @powi_f16(half %a, i32 %b) {26; CHECK-LABEL: powi_f16:27; CHECK: .seh_proc powi_f1628; CHECK-NEXT: // %bb.0: // %entry29; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill30; CHECK-NEXT: .seh_save_reg_x x30, 1631; CHECK-NEXT: .seh_endprologue32; CHECK-NEXT: fcvt s0, h033; CHECK-NEXT: scvtf s1, w034; CHECK-NEXT: bl powf35; CHECK-NEXT: fcvt h0, s036; CHECK-NEXT: .seh_startepilogue37; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload38; CHECK-NEXT: .seh_save_reg_x x30, 1639; CHECK-NEXT: .seh_endepilogue40; CHECK-NEXT: ret41; CHECK-NEXT: .seh_endfunclet42; CHECK-NEXT: .seh_endproc43entry:44 %c = call half @llvm.powi.f16.i32(half %a, i32 %b)45 ret half %c46}47 48define <2 x double> @powi_v2f64(<2 x double> %a, i32 %b) {49; CHECK-LABEL: powi_v2f64:50; CHECK: .seh_proc powi_v2f6451; CHECK-NEXT: // %bb.0: // %entry52; CHECK-NEXT: sub sp, sp, #4853; CHECK-NEXT: .seh_stackalloc 4854; CHECK-NEXT: str x30, [sp, #32] // 8-byte Spill55; CHECK-NEXT: .seh_save_reg x30, 3256; CHECK-NEXT: str d8, [sp, #40] // 8-byte Spill57; CHECK-NEXT: .seh_save_freg d8, 4058; CHECK-NEXT: .seh_endprologue59; CHECK-NEXT: scvtf d8, w060; CHECK-NEXT: str q0, [sp] // 16-byte Spill61; CHECK-NEXT: mov d0, v0.d[1]62; CHECK-NEXT: fmov d1, d863; CHECK-NEXT: bl pow64; CHECK-NEXT: fmov d1, d865; CHECK-NEXT: // kill: def $d0 killed $d0 def $q066; CHECK-NEXT: str q0, [sp, #16] // 16-byte Spill67; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload68; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q069; CHECK-NEXT: bl pow70; CHECK-NEXT: ldr q1, [sp, #16] // 16-byte Reload71; CHECK-NEXT: // kill: def $d0 killed $d0 def $q072; CHECK-NEXT: mov v0.d[1], v1.d[0]73; CHECK-NEXT: .seh_startepilogue74; CHECK-NEXT: ldr d8, [sp, #40] // 8-byte Reload75; CHECK-NEXT: .seh_save_freg d8, 4076; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Reload77; CHECK-NEXT: .seh_save_reg x30, 3278; CHECK-NEXT: add sp, sp, #4879; CHECK-NEXT: .seh_stackalloc 4880; CHECK-NEXT: .seh_endepilogue81; CHECK-NEXT: ret82; CHECK-NEXT: .seh_endfunclet83; CHECK-NEXT: .seh_endproc84entry:85 %c = call <2 x double> @llvm.powi.v2f64.i32(<2 x double> %a, i32 %b)86 ret <2 x double> %c87}88 89define <2 x float> @powi_v2f32(<2 x float> %a, i32 %b) {90; CHECK-LABEL: powi_v2f32:91; CHECK: .seh_proc powi_v2f3292; CHECK-NEXT: // %bb.0: // %entry93; CHECK-NEXT: sub sp, sp, #4894; CHECK-NEXT: .seh_stackalloc 4895; CHECK-NEXT: str x30, [sp, #32] // 8-byte Spill96; CHECK-NEXT: .seh_save_reg x30, 3297; CHECK-NEXT: str d8, [sp, #40] // 8-byte Spill98; CHECK-NEXT: .seh_save_freg d8, 4099; CHECK-NEXT: .seh_endprologue100; CHECK-NEXT: scvtf s8, w0101; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0102; CHECK-NEXT: str q0, [sp] // 16-byte Spill103; CHECK-NEXT: mov s0, v0.s[1]104; CHECK-NEXT: fmov s1, s8105; CHECK-NEXT: bl powf106; CHECK-NEXT: fmov s1, s8107; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0108; CHECK-NEXT: str q0, [sp, #16] // 16-byte Spill109; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload110; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0111; CHECK-NEXT: bl powf112; CHECK-NEXT: ldr q1, [sp, #16] // 16-byte Reload113; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0114; CHECK-NEXT: mov v0.s[1], v1.s[0]115; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0116; CHECK-NEXT: .seh_startepilogue117; CHECK-NEXT: ldr d8, [sp, #40] // 8-byte Reload118; CHECK-NEXT: .seh_save_freg d8, 40119; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Reload120; CHECK-NEXT: .seh_save_reg x30, 32121; CHECK-NEXT: add sp, sp, #48122; CHECK-NEXT: .seh_stackalloc 48123; CHECK-NEXT: .seh_endepilogue124; CHECK-NEXT: ret125; CHECK-NEXT: .seh_endfunclet126; CHECK-NEXT: .seh_endproc127entry:128 %c = call <2 x float> @llvm.powi.v2f32.i32(<2 x float> %a, i32 %b)129 ret <2 x float> %c130}131 132declare <2 x double> @llvm.powi.v2f64.i32(<2 x double>, i32)133declare <2 x float> @llvm.powi.v2f32.i32(<2 x float>, i32)134declare double @llvm.powi.f64.i32(double, i32)135declare float @llvm.powi.f32.i32(float, i32)136declare half @llvm.powi.f16.i32(half, i32)137