| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s |
| ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s |
| |
| define <1 x float> @constrained_vector_fdiv_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fdiv_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsdivsp 1, 1, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fdiv_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsdivsp 1, 1, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32( |
| <1 x float> %x, |
| <1 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %div |
| } |
| |
| define <2 x double> @constrained_vector_fdiv_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fdiv_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvdivdp 34, 34, 35 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fdiv_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvdivdp 34, 34, 35 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %div |
| } |
| |
| define <3 x float> @constrained_vector_fdiv_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fdiv_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 35 |
| ; PC64LE-NEXT: xxsldwi 1, 35, 35, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 3, 34 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI2_0@toc@l |
| ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 |
| ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xsdivsp 1, 2, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 4 |
| ; PC64LE-NEXT: xsdivsp 0, 3, 0 |
| ; PC64LE-NEXT: xscvspdpn 3, 5 |
| ; PC64LE-NEXT: xsdivsp 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 34, 1 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 2 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI2_0@toc@l |
| ; PC64LE9-NEXT: xxswapd 2, 34 |
| ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 3, 3 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: xsdivsp 0, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 35 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xsdivsp 1, 2, 1 |
| ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xsdivsp 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %div |
| } |
| |
| define <3 x double> @constrained_vector_fdiv_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fdiv_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE-NEXT: xsdivdp 3, 3, 6 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE-NEXT: xvdivdp 2, 1, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE9-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE9-NEXT: xsdivdp 3, 3, 6 |
| ; PC64LE9-NEXT: xvdivdp 2, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %div |
| } |
| |
| define <4 x double> @constrained_vector_fdiv_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fdiv_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvdivdp 35, 35, 37 |
| ; PC64LE-NEXT: xvdivdp 34, 34, 36 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvdivdp 35, 35, 37 |
| ; PC64LE9-NEXT: xvdivdp 34, 34, 36 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %div |
| } |
| |
| define <1 x float> @constrained_vector_frem_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_frem_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl fmodf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_frem_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl fmodf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32( |
| <1 x float> %x, |
| <1 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %rem |
| } |
| |
| define <2 x double> @constrained_vector_frem_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_frem_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_frem_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: xxswapd 2, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 61, 1 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %rem |
| } |
| |
| define <3 x float> @constrained_vector_frem_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_frem_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: bl fmodf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 62 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl fmodf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl fmodf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI7_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_frem_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: bl fmodf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 62 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl fmodf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl fmodf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI7_0@toc@l |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 31 |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %rem |
| } |
| |
| define <3 x double> @constrained_vector_frem_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_frem_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: fmr 28, 2 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: fmr 2, 4 |
| ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 6 |
| ; PC64LE-NEXT: fmr 30, 5 |
| ; PC64LE-NEXT: fmr 29, 3 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 28 |
| ; PC64LE-NEXT: fmr 2, 30 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 2, 31 |
| ; PC64LE-NEXT: fmr 1, 29 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_frem_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 28, 2 |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 2, 4 |
| ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 6 |
| ; PC64LE9-NEXT: fmr 30, 5 |
| ; PC64LE9-NEXT: fmr 29, 3 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 28 |
| ; PC64LE9-NEXT: fmr 2, 30 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 29 |
| ; PC64LE9-NEXT: fmr 2, 31 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %rem |
| } |
| |
| define <4 x double> @constrained_vector_frem_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_frem_v4f64: |
| ; PC64LE: # %bb.0: |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -128(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 28, 2 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 96 |
| ; PC64LE-NEXT: vmr 29, 3 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 4 |
| ; PC64LE-NEXT: li 3, 112 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 5 |
| ; PC64LE-NEXT: xxlor 1, 60, 60 |
| ; PC64LE-NEXT: xxlor 2, 62, 62 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 59, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 60 |
| ; PC64LE-NEXT: xxswapd 2, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 59, 1 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: xxlor 1, 61, 61 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 60, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 61 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: bl fmod |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 112 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 60, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 96 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 128 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_frem_v4f64: |
| ; PC64LE9: # %bb.0: |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -112(1) |
| ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 4 |
| ; PC64LE9-NEXT: xscpsgndp 2, 62, 62 |
| ; PC64LE9-NEXT: vmr 28, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 60, 60 |
| ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 5 |
| ; PC64LE9-NEXT: vmr 29, 3 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 59, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 60 |
| ; PC64LE9-NEXT: xxswapd 2, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 59, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 61, 61 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 60, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 61 |
| ; PC64LE9-NEXT: xxswapd 2, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: bl fmod |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 60, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 112 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %rem |
| } |
| |
| define <1 x float> @constrained_vector_fmul_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fmul_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsmulsp 1, 1, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fmul_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsmulsp 1, 1, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32( |
| <1 x float> %x, |
| <1 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %mul |
| } |
| |
| define <2 x double> @constrained_vector_fmul_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fmul_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvmuldp 34, 34, 35 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fmul_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvmuldp 34, 34, 35 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %mul |
| } |
| |
| define <3 x float> @constrained_vector_fmul_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fmul_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 35, 35, 3 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: xxswapd 3, 34 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI12_0@toc@l |
| ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xscvspdpn 4, 4 |
| ; PC64LE-NEXT: xsmulsp 0, 1, 0 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: xsmulsp 2, 3, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 2 |
| ; PC64LE-NEXT: xsmulsp 0, 1, 4 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fmul_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI12_0@toc@l |
| ; PC64LE9-NEXT: xxswapd 2, 34 |
| ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 3, 3 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: xsmulsp 0, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 35 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xsmulsp 1, 2, 1 |
| ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xsmulsp 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %mul |
| } |
| |
| define <3 x double> @constrained_vector_fmul_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fmul_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE-NEXT: xsmuldp 3, 3, 6 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE-NEXT: xvmuldp 2, 1, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fmul_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE9-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE9-NEXT: xsmuldp 3, 3, 6 |
| ; PC64LE9-NEXT: xvmuldp 2, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %mul |
| } |
| |
| define <4 x double> @constrained_vector_fmul_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fmul_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvmuldp 35, 35, 37 |
| ; PC64LE-NEXT: xvmuldp 34, 34, 36 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fmul_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvmuldp 35, 35, 37 |
| ; PC64LE9-NEXT: xvmuldp 34, 34, 36 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %mul |
| } |
| |
| define <1 x float> @constrained_vector_fadd_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fadd_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsaddsp 1, 1, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fadd_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsaddsp 1, 1, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32( |
| <1 x float> %x, |
| <1 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %add |
| } |
| |
| define <2 x double> @constrained_vector_fadd_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fadd_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvadddp 34, 34, 35 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fadd_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvadddp 34, 34, 35 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %add |
| } |
| |
| define <3 x float> @constrained_vector_fadd_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fadd_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 35, 35, 3 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: xxswapd 3, 34 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI17_0@toc@l |
| ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xscvspdpn 4, 4 |
| ; PC64LE-NEXT: xsaddsp 0, 1, 0 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: xsaddsp 2, 3, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 2 |
| ; PC64LE-NEXT: xsaddsp 0, 1, 4 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fadd_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI17_0@toc@l |
| ; PC64LE9-NEXT: xxswapd 2, 34 |
| ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 3, 3 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: xsaddsp 0, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 35 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xsaddsp 1, 2, 1 |
| ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xsaddsp 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %add |
| } |
| |
| define <3 x double> @constrained_vector_fadd_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fadd_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE-NEXT: xsadddp 3, 3, 6 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE-NEXT: xvadddp 2, 1, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fadd_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE9-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE9-NEXT: xsadddp 3, 3, 6 |
| ; PC64LE9-NEXT: xvadddp 2, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %add |
| } |
| |
| define <4 x double> @constrained_vector_fadd_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fadd_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvadddp 35, 35, 37 |
| ; PC64LE-NEXT: xvadddp 34, 34, 36 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fadd_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvadddp 35, 35, 37 |
| ; PC64LE9-NEXT: xvadddp 34, 34, 36 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %add |
| } |
| |
| define <1 x float> @constrained_vector_fsub_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fsub_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xssubsp 1, 1, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fsub_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xssubsp 1, 1, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32( |
| <1 x float> %x, |
| <1 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %sub |
| } |
| |
| define <2 x double> @constrained_vector_fsub_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fsub_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvsubdp 34, 34, 35 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fsub_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvsubdp 34, 34, 35 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %sub |
| } |
| |
| define <3 x float> @constrained_vector_fsub_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fsub_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 35, 35, 3 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: xxswapd 3, 34 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI22_0@toc@l |
| ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xscvspdpn 4, 4 |
| ; PC64LE-NEXT: xssubsp 0, 1, 0 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: xssubsp 2, 3, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 2 |
| ; PC64LE-NEXT: xssubsp 0, 1, 4 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fsub_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI22_0@toc@l |
| ; PC64LE9-NEXT: xxswapd 2, 34 |
| ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 3, 3 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: xssubsp 0, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 35 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xssubsp 1, 2, 1 |
| ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xssubsp 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %sub |
| } |
| |
| define <3 x double> @constrained_vector_fsub_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fsub_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE-NEXT: xssubdp 3, 3, 6 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE-NEXT: xvsubdp 2, 1, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fsub_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE9-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE9-NEXT: xssubdp 3, 3, 6 |
| ; PC64LE9-NEXT: xvsubdp 2, 1, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %sub |
| } |
| |
| define <4 x double> @constrained_vector_fsub_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_fsub_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvsubdp 35, 35, 37 |
| ; PC64LE-NEXT: xvsubdp 34, 34, 36 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fsub_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvsubdp 35, 35, 37 |
| ; PC64LE9-NEXT: xvsubdp 34, 34, 36 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %sub |
| } |
| |
| define <1 x float> @constrained_vector_sqrt_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sqrt_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xssqrtsp 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xssqrtsp 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %sqrt |
| } |
| |
| define <2 x double> @constrained_vector_sqrt_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sqrt_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvsqrtdp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvsqrtdp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %sqrt |
| } |
| |
| define <3 x float> @constrained_vector_sqrt_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sqrt_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI27_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xssqrtsp 0, 0 |
| ; PC64LE-NEXT: xssqrtsp 1, 1 |
| ; PC64LE-NEXT: xssqrtsp 2, 2 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 2 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI27_0@toc@l |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xssqrtsp 1, 1 |
| ; PC64LE9-NEXT: xssqrtsp 2, 2 |
| ; PC64LE9-NEXT: xssqrtsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %sqrt |
| } |
| |
| define <3 x double> @constrained_vector_sqrt_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sqrt_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE-NEXT: xssqrtdp 3, 3 |
| ; PC64LE-NEXT: xvsqrtdp 2, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE9-NEXT: xssqrtdp 3, 3 |
| ; PC64LE9-NEXT: xvsqrtdp 2, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %sqrt |
| } |
| |
| define <4 x double> @constrained_vector_sqrt_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sqrt_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvsqrtdp 35, 35 |
| ; PC64LE-NEXT: xvsqrtdp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvsqrtdp 35, 35 |
| ; PC64LE9-NEXT: xvsqrtdp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %sqrt |
| } |
| |
| define <1 x float> @constrained_vector_pow_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_pow_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl powf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_pow_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl powf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32( |
| <1 x float> %x, |
| <1 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %pow |
| } |
| |
| define <2 x double> @constrained_vector_pow_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_pow_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_pow_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: xxswapd 2, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 61, 1 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %pow |
| } |
| |
| define <3 x float> @constrained_vector_pow_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_pow_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: bl powf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 62 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl powf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl powf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI32_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_pow_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: bl powf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 62 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl powf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl powf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI32_0@toc@l |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 31 |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %pow |
| } |
| |
| define <3 x double> @constrained_vector_pow_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_pow_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: fmr 28, 2 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: fmr 2, 4 |
| ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 6 |
| ; PC64LE-NEXT: fmr 30, 5 |
| ; PC64LE-NEXT: fmr 29, 3 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 28 |
| ; PC64LE-NEXT: fmr 2, 30 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 2, 31 |
| ; PC64LE-NEXT: fmr 1, 29 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_pow_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 28, 2 |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 2, 4 |
| ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 6 |
| ; PC64LE9-NEXT: fmr 30, 5 |
| ; PC64LE9-NEXT: fmr 29, 3 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 28 |
| ; PC64LE9-NEXT: fmr 2, 30 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 29 |
| ; PC64LE9-NEXT: fmr 2, 31 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %pow |
| } |
| |
| define <4 x double> @constrained_vector_pow_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_pow_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -128(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 28, 2 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 96 |
| ; PC64LE-NEXT: vmr 29, 3 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 4 |
| ; PC64LE-NEXT: li 3, 112 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 5 |
| ; PC64LE-NEXT: xxlor 1, 60, 60 |
| ; PC64LE-NEXT: xxlor 2, 62, 62 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 59, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 60 |
| ; PC64LE-NEXT: xxswapd 2, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 59, 1 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: xxlor 1, 61, 61 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 60, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 61 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: bl pow |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 112 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 60, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 96 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 128 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_pow_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -112(1) |
| ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 4 |
| ; PC64LE9-NEXT: xscpsgndp 2, 62, 62 |
| ; PC64LE9-NEXT: vmr 28, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 60, 60 |
| ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 5 |
| ; PC64LE9-NEXT: vmr 29, 3 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 59, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 60 |
| ; PC64LE9-NEXT: xxswapd 2, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 59, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 61, 61 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 60, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 61 |
| ; PC64LE9-NEXT: xxswapd 2, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: bl pow |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 60, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 112 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %pow |
| } |
| |
| define <1 x float> @constrained_vector_powi_v1f32(<1 x float> %x, i32 %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_powi_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: clrldi 4, 4, 32 |
| ; PC64LE-NEXT: bl __powisf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_powi_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: clrldi 4, 4, 32 |
| ; PC64LE9-NEXT: bl __powisf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32( |
| <1 x float> %x, |
| i32 %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %powi |
| } |
| |
| define <2 x double> @constrained_vector_powi_v2f64(<2 x double> %x, i32 %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_powi_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: std 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: clrldi 30, 5, 32 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: ld 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_powi_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: std 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: clrldi 30, 5, 32 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: ld 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64( |
| <2 x double> %x, |
| i32 %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %powi |
| } |
| |
| define <3 x float> @constrained_vector_powi_v3f32(<3 x float> %x, i32 %y) #0 { |
| ; |
| ; |
| ; PC64LE-LABEL: constrained_vector_powi_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: clrldi 30, 5, 32 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl __powisf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl __powisf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl __powisf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI37_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_powi_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: clrldi 30, 5, 32 |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl __powisf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl __powisf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl __powisf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI37_0@toc@l |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 31 |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32( |
| <3 x float> %x, |
| i32 %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %powi |
| } |
| |
| define <3 x double> @constrained_vector_powi_v3f64(<3 x double> %x, i32 %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_powi_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: clrldi 30, 6, 32 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_powi_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: clrldi 30, 6, 32 |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64( |
| <3 x double> %x, |
| i32 %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %powi |
| } |
| |
| define <4 x double> @constrained_vector_powi_v4f64(<4 x double> %x, i32 %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_powi_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -112(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: std 30, 96(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: clrldi 30, 7, 32 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: mr 4, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl __powidf2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: ld 30, 96(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 112 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_powi_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -96(1) |
| ; PC64LE9-NEXT: std 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: clrldi 30, 7, 32 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: mr 4, 30 |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl __powidf2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: ld 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 96 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64( |
| <4 x double> %x, |
| i32 %y, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %powi |
| } |
| |
| define <1 x float> @constrained_vector_sin_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sin_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl sinf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sin_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl sinf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %sin |
| } |
| |
| define <2 x double> @constrained_vector_sin_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sin_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sin_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %sin |
| } |
| |
| define <3 x float> @constrained_vector_sin_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sin_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl sinf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl sinf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl sinf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI42_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sin_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl sinf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl sinf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl sinf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI42_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %sin |
| } |
| |
| define <3 x double> @constrained_vector_sin_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sin_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sin_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %sin |
| } |
| |
| define <4 x double> @constrained_vector_sin_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sin_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl sin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sin_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl sin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %sin |
| } |
| |
| define <1 x float> @constrained_vector_cos_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_cos_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl cosf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_cos_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl cosf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %cos |
| } |
| |
| define <2 x double> @constrained_vector_cos_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_cos_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_cos_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %cos |
| } |
| |
| define <3 x float> @constrained_vector_cos_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_cos_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl cosf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl cosf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl cosf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI47_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_cos_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl cosf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl cosf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl cosf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI47_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %cos |
| } |
| |
| define <3 x double> @constrained_vector_cos_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_cos_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_cos_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %cos |
| } |
| |
| define <4 x double> @constrained_vector_cos_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_cos_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl cos |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_cos_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl cos |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %cos |
| } |
| |
| define <1 x float> @constrained_vector_exp_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl expf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl expf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %exp |
| } |
| |
| define <2 x double> @constrained_vector_exp_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %exp |
| } |
| |
| define <3 x float> @constrained_vector_exp_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl expf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl expf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl expf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI52_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl expf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl expf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl expf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI52_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %exp |
| } |
| |
| define <3 x double> @constrained_vector_exp_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %exp |
| } |
| |
| define <4 x double> @constrained_vector_exp_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl exp |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl exp |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %exp |
| } |
| |
| define <1 x float> @constrained_vector_exp2_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp2_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl exp2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp2_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl exp2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %exp2 |
| } |
| |
| define <2 x double> @constrained_vector_exp2_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp2_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp2_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %exp2 |
| } |
| |
| define <3 x float> @constrained_vector_exp2_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp2_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl exp2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl exp2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl exp2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI57_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp2_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl exp2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl exp2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl exp2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI57_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %exp2 |
| } |
| |
| define <3 x double> @constrained_vector_exp2_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp2_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp2_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %exp2 |
| } |
| |
| define <4 x double> @constrained_vector_exp2_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_exp2_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl exp2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_exp2_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl exp2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %exp2 |
| } |
| |
| define <1 x float> @constrained_vector_log_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl logf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl logf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log = call <1 x float> @llvm.experimental.constrained.log.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %log |
| } |
| |
| define <2 x double> @constrained_vector_log_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log = call <2 x double> @llvm.experimental.constrained.log.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %log |
| } |
| |
| define <3 x float> @constrained_vector_log_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl logf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl logf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl logf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI62_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl logf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl logf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl logf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI62_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log = call <3 x float> @llvm.experimental.constrained.log.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %log |
| } |
| |
| define <3 x double> @constrained_vector_log_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log = call <3 x double> @llvm.experimental.constrained.log.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %log |
| } |
| |
| define <4 x double> @constrained_vector_log_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log = call <4 x double> @llvm.experimental.constrained.log.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %log |
| } |
| |
| define <1 x float> @constrained_vector_log10_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log10_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl log10f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log10_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl log10f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %log10 |
| } |
| |
| define <2 x double> @constrained_vector_log10_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log10_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log10_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %log10 |
| } |
| |
| define <3 x float> @constrained_vector_log10_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log10_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl log10f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl log10f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl log10f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI67_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log10_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl log10f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl log10f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl log10f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI67_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %log10 |
| } |
| |
| define <3 x double> @constrained_vector_log10_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log10_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log10_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %log10 |
| } |
| |
| define <4 x double> @constrained_vector_log10_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log10_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log10 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log10_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log10 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %log10 |
| } |
| |
| define <1 x float> @constrained_vector_log2_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log2_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl log2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log2_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl log2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %log2 |
| } |
| |
| define <2 x double> @constrained_vector_log2_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log2_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log2_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %log2 |
| } |
| |
| define <3 x float> @constrained_vector_log2_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log2_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl log2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl log2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl log2f |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI72_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log2_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl log2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl log2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl log2f |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI72_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %log2 |
| } |
| |
| define <3 x double> @constrained_vector_log2_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log2_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log2_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %log2 |
| } |
| |
| define <4 x double> @constrained_vector_log2_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_log2_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl log2 |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_log2_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl log2 |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %log2 |
| } |
| |
| define <1 x float> @constrained_vector_rint_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_rint_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrdpic 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_rint_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrdpic 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %rint |
| } |
| |
| define <2 x double> @constrained_vector_rint_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_rint_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvrdpic 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_rint_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvrdpic 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %rint |
| } |
| |
| define <3 x float> @constrained_vector_rint_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_rint_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI77_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xsrdpic 0, 0 |
| ; PC64LE-NEXT: xsrdpic 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xsrdpic 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_rint_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI77_0@toc@l |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xsrdpic 1, 1 |
| ; PC64LE9-NEXT: xsrdpic 2, 2 |
| ; PC64LE9-NEXT: xsrdpic 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %rint |
| } |
| |
| define <3 x double> @constrained_vector_rint_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_rint_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE-NEXT: xsrdpic 3, 3 |
| ; PC64LE-NEXT: xvrdpic 2, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_rint_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE9-NEXT: xsrdpic 3, 3 |
| ; PC64LE9-NEXT: xvrdpic 2, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %rint |
| } |
| |
| define <4 x double> @constrained_vector_rint_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_rint_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvrdpic 35, 35 |
| ; PC64LE-NEXT: xvrdpic 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_rint_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvrdpic 35, 35 |
| ; PC64LE9-NEXT: xvrdpic 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %rint |
| } |
| |
| define <1 x float> @constrained_vector_nearbyint_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl nearbyintf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl nearbyintf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32( |
| <1 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %nearby |
| } |
| |
| define <2 x double> @constrained_vector_nearbyint_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 62, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 62, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 34, 62, 1 |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %nearby |
| } |
| |
| define <3 x float> @constrained_vector_nearbyint_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 2 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl nearbyintf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl nearbyintf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: bl nearbyintf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI82_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: vmr 31, 2 |
| ; PC64LE9-NEXT: bl nearbyintf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl nearbyintf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: bl nearbyintf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha |
| ; PC64LE9-NEXT: xscvdpspn 36, 31 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI82_0@toc@l |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32( |
| <3 x float> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %nearby |
| } |
| |
| define <3 x double> @constrained_vector_nearby_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_nearby_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -80(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 31, 3 |
| ; PC64LE-NEXT: fmr 30, 2 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 63, 1, 1 |
| ; PC64LE-NEXT: fmr 1, 30 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE-NEXT: fmr 1, 31 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 80 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_nearby_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -64(1) |
| ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: fmr 31, 3 |
| ; PC64LE9-NEXT: fmr 30, 2 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 63, 1, 1 |
| ; PC64LE9-NEXT: fmr 1, 30 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 63, 1, 63 |
| ; PC64LE9-NEXT: fmr 1, 31 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 64 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %nearby |
| } |
| |
| define <4 x double> @constrained_vector_nearbyint_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: xxlor 1, 62, 62 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 62 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE-NEXT: xxlor 1, 63, 63 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxlor 61, 1, 1 |
| ; PC64LE-NEXT: xxswapd 1, 63 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: bl nearbyint |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: li 3, 80 |
| ; PC64LE-NEXT: vmr 2, 30 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: xscpsgndp 1, 62, 62 |
| ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 62 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 62, 61, 1 |
| ; PC64LE9-NEXT: xscpsgndp 1, 63, 63 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscpsgndp 61, 1, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: bl nearbyint |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 35, 61, 1 |
| ; PC64LE9-NEXT: vmr 2, 30 |
| ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %nearby |
| } |
| |
| define <1 x float> @constrained_vector_maxnum_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_maxnum_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl fmaxf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_maxnum_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl fmaxf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32( |
| <1 x float> %x, <1 x float> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %max |
| } |
| |
| define <2 x double> @constrained_vector_maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_maxnum_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvmaxdp 34, 34, 35 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvmaxdp 34, 34, 35 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %max |
| } |
| |
| define <3 x float> @constrained_vector_maxnum_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_maxnum_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: bl fmaxf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 62 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl fmaxf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl fmaxf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI87_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: bl fmaxf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 62 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl fmaxf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl fmaxf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI87_0@toc@l |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 31 |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %max |
| } |
| |
| define <3 x double> @constrained_vector_max_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_max_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -64(1) |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 2, 6 |
| ; PC64LE-NEXT: xvmaxdp 63, 1, 0 |
| ; PC64LE-NEXT: fmr 1, 3 |
| ; PC64LE-NEXT: bl fmax |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 64 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_max_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -48(1) |
| ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE9-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE9-NEXT: fmr 2, 6 |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xvmaxdp 63, 1, 0 |
| ; PC64LE9-NEXT: fmr 1, 3 |
| ; PC64LE9-NEXT: bl fmax |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: addi 1, 1, 48 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %max |
| } |
| |
| define <4 x double> @constrained_vector_maxnum_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_maxnum_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvmaxdp 34, 34, 36 |
| ; PC64LE-NEXT: xvmaxdp 35, 35, 37 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvmaxdp 34, 34, 36 |
| ; PC64LE9-NEXT: xvmaxdp 35, 35, 37 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %max |
| } |
| |
| define <1 x float> @constrained_vector_minnum_v1f32(<1 x float> %x, <1 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_minnum_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -32(1) |
| ; PC64LE-NEXT: bl fminf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: addi 1, 1, 32 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_minnum_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -32(1) |
| ; PC64LE9-NEXT: bl fminf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: addi 1, 1, 32 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32( |
| <1 x float> %x, <1 x float> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %min |
| } |
| |
| define <2 x double> @constrained_vector_minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_minnum_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvmindp 34, 34, 35 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_minnum_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvmindp 34, 34, 35 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64( |
| <2 x double> %x, |
| <2 x double> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %min |
| } |
| |
| define <3 x float> @constrained_vector_minnum_v3f32(<3 x float> %x, <3 x float> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_minnum_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -96(1) |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: vmr 31, 3 |
| ; PC64LE-NEXT: vmr 30, 2 |
| ; PC64LE-NEXT: bl fminf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 62 |
| ; PC64LE-NEXT: xxswapd 2, 63 |
| ; PC64LE-NEXT: fmr 31, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl fminf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 |
| ; PC64LE-NEXT: fmr 30, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: bl fminf |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xscvdpspn 34, 30 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha |
| ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI92_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: li 3, 64 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 31 |
| ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: addi 1, 1, 96 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_minnum_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -80(1) |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill |
| ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 |
| ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: vmr 31, 3 |
| ; PC64LE9-NEXT: vmr 30, 2 |
| ; PC64LE9-NEXT: bl fminf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxswapd 0, 62 |
| ; PC64LE9-NEXT: fmr 31, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 63 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl fminf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 |
| ; PC64LE9-NEXT: fmr 30, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: bl fminf |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: xscvdpspn 34, 1 |
| ; PC64LE9-NEXT: xscvdpspn 35, 30 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha |
| ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI92_0@toc@l |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 31 |
| ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload |
| ; PC64LE9-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE9-NEXT: addi 1, 1, 80 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32( |
| <3 x float> %x, |
| <3 x float> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %min |
| } |
| |
| define <3 x double> @constrained_vector_min_v3f64(<3 x double> %x, <3 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_min_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mflr 0 |
| ; PC64LE-NEXT: std 0, 16(1) |
| ; PC64LE-NEXT: stdu 1, -64(1) |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; PC64LE-NEXT: fmr 2, 6 |
| ; PC64LE-NEXT: xvmindp 63, 1, 0 |
| ; PC64LE-NEXT: fmr 1, 3 |
| ; PC64LE-NEXT: bl fmin |
| ; PC64LE-NEXT: nop |
| ; PC64LE-NEXT: xxswapd 0, 63 |
| ; PC64LE-NEXT: li 3, 48 |
| ; PC64LE-NEXT: xxlor 2, 63, 63 |
| ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload |
| ; PC64LE-NEXT: fmr 3, 1 |
| ; PC64LE-NEXT: fmr 1, 0 |
| ; PC64LE-NEXT: addi 1, 1, 64 |
| ; PC64LE-NEXT: ld 0, 16(1) |
| ; PC64LE-NEXT: mtlr 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_min_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mflr 0 |
| ; PC64LE9-NEXT: std 0, 16(1) |
| ; PC64LE9-NEXT: stdu 1, -48(1) |
| ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 |
| ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 5, 4 |
| ; PC64LE9-NEXT: xxmrghd 1, 2, 1 |
| ; PC64LE9-NEXT: fmr 2, 6 |
| ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill |
| ; PC64LE9-NEXT: xvmindp 63, 1, 0 |
| ; PC64LE9-NEXT: fmr 1, 3 |
| ; PC64LE9-NEXT: bl fmin |
| ; PC64LE9-NEXT: nop |
| ; PC64LE9-NEXT: fmr 3, 1 |
| ; PC64LE9-NEXT: xxswapd 1, 63 |
| ; PC64LE9-NEXT: xscpsgndp 2, 63, 63 |
| ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: addi 1, 1, 48 |
| ; PC64LE9-NEXT: ld 0, 16(1) |
| ; PC64LE9-NEXT: mtlr 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64( |
| <3 x double> %x, |
| <3 x double> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %min |
| } |
| |
| define <4 x double> @constrained_vector_minnum_v4f64(<4 x double> %x, <4 x double> %y) #0 { |
| ; PC64LE-LABEL: constrained_vector_minnum_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvmindp 34, 34, 36 |
| ; PC64LE-NEXT: xvmindp 35, 35, 37 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_minnum_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvmindp 34, 34, 36 |
| ; PC64LE9-NEXT: xvmindp 35, 35, 37 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64( |
| <4 x double> %x, |
| <4 x double> %y, |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %min |
| } |
| |
| define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpsxws 0, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxws 0, 1 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i32> %result |
| } |
| |
| define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32(<2 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE-NEXT: xscvdpsxws 1, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 3 |
| ; PC64LE-NEXT: mtvsrwz 35, 4 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32( |
| <2 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i32> %result |
| } |
| |
| define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE-NEXT: xscvdpsxws 1, 1 |
| ; PC64LE-NEXT: xscvdpsxws 2, 2 |
| ; PC64LE-NEXT: mffprwz 4, 0 |
| ; PC64LE-NEXT: mffprwz 5, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 4 |
| ; PC64LE-NEXT: mtvsrwz 35, 5 |
| ; PC64LE-NEXT: mffprwz 4, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: mtvsrwz 36, 4 |
| ; PC64LE-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: mtvsrwz 36, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l |
| ; PC64LE9-NEXT: vmrghw 3, 4, 3 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: vperm 2, 2, 3, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i32> %result |
| } |
| |
| define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32(<4 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvspsxws 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvspsxws 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32( |
| <4 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i32> %result |
| } |
| |
| define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpsxds 0, 1 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxds 0, 1 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i64> %result |
| } |
| |
| define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32(<2 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE-NEXT: xscvdpsxds 1, 1 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 1 |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mtfprd 1, 4 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: mtvsrdd 34, 4, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32( |
| <2 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i64> %result |
| } |
| |
| define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE-NEXT: xscvdpsxds 1, 1 |
| ; PC64LE-NEXT: xscvdpsxds 2, 2 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 1 |
| ; PC64LE-NEXT: mffprd 5, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 5, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i64> %result |
| } |
| |
| define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32(<4 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xscvspdpn 1, 34 |
| ; PC64LE-NEXT: xxswapd 2, 34 |
| ; PC64LE-NEXT: xxsldwi 3, 34, 34, 1 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xscvdpsxds 1, 1 |
| ; PC64LE-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE-NEXT: xscvdpsxds 2, 2 |
| ; PC64LE-NEXT: xscvdpsxds 3, 3 |
| ; PC64LE-NEXT: mffprd 3, 1 |
| ; PC64LE-NEXT: mtfprd 1, 3 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 2 |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mffprd 3, 3 |
| ; PC64LE-NEXT: mtfprd 2, 4 |
| ; PC64LE-NEXT: mtfprd 3, 3 |
| ; PC64LE-NEXT: xxmrghd 34, 2, 0 |
| ; PC64LE-NEXT: xxmrghd 35, 1, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: xscvspdpn 0, 34 |
| ; PC64LE9-NEXT: mtvsrdd 36, 4, 3 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: vmr 2, 4 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: mtvsrdd 35, 3, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32( |
| <4 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i64> %result |
| } |
| |
| define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64(<1 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpsxws 0, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxws 0, 1 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64( |
| <1 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i32> %result |
| } |
| |
| |
| define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xscvdpsxws 1, 34 |
| ; PC64LE-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE-NEXT: mffprwz 3, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 3 |
| ; PC64LE-NEXT: mffprwz 4, 0 |
| ; PC64LE-NEXT: mtvsrwz 35, 4 |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxws 0, 34 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i32> %result |
| } |
| |
| define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpsxws 0, 1 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha |
| ; PC64LE-NEXT: xscvdpsxws 1, 2 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l |
| ; PC64LE-NEXT: xscvdpsxws 2, 3 |
| ; PC64LE-NEXT: mffprwz 4, 0 |
| ; PC64LE-NEXT: mffprwz 5, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 4 |
| ; PC64LE-NEXT: mtvsrwz 35, 5 |
| ; PC64LE-NEXT: mffprwz 4, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: mtvsrwz 36, 4 |
| ; PC64LE-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxws 0, 1 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 2 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 3 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 36, 3 |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i32> %result |
| } |
| |
| define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: xscvdpsxws 1, 34 |
| ; PC64LE-NEXT: xscvdpsxws 3, 35 |
| ; PC64LE-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE-NEXT: xscvdpsxws 2, 2 |
| ; PC64LE-NEXT: mffprwz 3, 1 |
| ; PC64LE-NEXT: mffprwz 4, 3 |
| ; PC64LE-NEXT: mffprwz 5, 0 |
| ; PC64LE-NEXT: mffprwz 6, 2 |
| ; PC64LE-NEXT: rldimi 5, 3, 32, 0 |
| ; PC64LE-NEXT: rldimi 6, 4, 32, 0 |
| ; PC64LE-NEXT: mtfprd 0, 5 |
| ; PC64LE-NEXT: mtfprd 1, 6 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxws 0, 34 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 4, 0 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 35 |
| ; PC64LE9-NEXT: rldimi 4, 3, 32, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 35 |
| ; PC64LE9-NEXT: xscvdpsxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 5, 0 |
| ; PC64LE9-NEXT: rldimi 5, 3, 32, 0 |
| ; PC64LE9-NEXT: mtvsrdd 34, 5, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64( |
| <4 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i32> %result |
| } |
| |
| define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64(<1 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpsxds 0, 1 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxds 0, 1 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64( |
| <1 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i64> %result |
| } |
| |
| define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvdpsxds 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvdpsxds 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i64> %result |
| } |
| |
| define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpsxds 0, 1 |
| ; PC64LE-NEXT: xscvdpsxds 1, 2 |
| ; PC64LE-NEXT: xscvdpsxds 2, 3 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 1 |
| ; PC64LE-NEXT: mffprd 5, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpsxds 0, 1 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 2 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: xscvdpsxds 0, 3 |
| ; PC64LE9-NEXT: mffprd 5, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i64> %result |
| } |
| |
| define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvdpsxds 35, 35 |
| ; PC64LE-NEXT: xvcvdpsxds 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvdpsxds 35, 35 |
| ; PC64LE9-NEXT: xvcvdpsxds 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64( |
| <4 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i64> %result |
| } |
| |
| define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpuxws 0, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxws 0, 1 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i32> %result |
| } |
| |
| define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32(<2 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE-NEXT: xscvdpuxws 1, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 3 |
| ; PC64LE-NEXT: mtvsrwz 35, 4 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32( |
| <2 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i32> %result |
| } |
| |
| define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE-NEXT: xscvdpuxws 1, 1 |
| ; PC64LE-NEXT: xscvdpuxws 2, 2 |
| ; PC64LE-NEXT: mffprwz 4, 0 |
| ; PC64LE-NEXT: mffprwz 5, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 4 |
| ; PC64LE-NEXT: mtvsrwz 35, 5 |
| ; PC64LE-NEXT: mffprwz 4, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: mtvsrwz 36, 4 |
| ; PC64LE-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: mtvsrwz 36, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l |
| ; PC64LE9-NEXT: vmrghw 3, 4, 3 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: vperm 2, 2, 3, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i32> %result |
| } |
| |
| define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32(<4 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvspuxws 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvspuxws 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32( |
| <4 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i32> %result |
| } |
| |
| define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpuxds 0, 1 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxds 0, 1 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i64> %result |
| } |
| |
| define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32(<2 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE-NEXT: xscvdpuxds 1, 1 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 1 |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mtfprd 1, 4 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: mtvsrdd 34, 4, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32( |
| <2 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i64> %result |
| } |
| |
| define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE-NEXT: xscvdpuxds 1, 1 |
| ; PC64LE-NEXT: xscvdpuxds 2, 2 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 1 |
| ; PC64LE-NEXT: mffprd 5, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 5, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i64> %result |
| } |
| |
| define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32(<4 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xscvspdpn 1, 34 |
| ; PC64LE-NEXT: xxswapd 2, 34 |
| ; PC64LE-NEXT: xxsldwi 3, 34, 34, 1 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xscvdpuxds 1, 1 |
| ; PC64LE-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE-NEXT: xscvdpuxds 2, 2 |
| ; PC64LE-NEXT: xscvdpuxds 3, 3 |
| ; PC64LE-NEXT: mffprd 3, 1 |
| ; PC64LE-NEXT: mtfprd 1, 3 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 2 |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mffprd 3, 3 |
| ; PC64LE-NEXT: mtfprd 2, 4 |
| ; PC64LE-NEXT: mtfprd 3, 3 |
| ; PC64LE-NEXT: xxmrghd 34, 2, 0 |
| ; PC64LE-NEXT: xxmrghd 35, 1, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: xscvspdpn 0, 34 |
| ; PC64LE9-NEXT: mtvsrdd 36, 4, 3 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: vmr 2, 4 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 0 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: mtvsrdd 35, 3, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32( |
| <4 x float> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i64> %result |
| } |
| |
| define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64(<1 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpuxws 0, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxws 0, 1 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64( |
| <1 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i32> %result |
| } |
| |
| define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xscvdpuxws 1, 34 |
| ; PC64LE-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE-NEXT: mffprwz 3, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 3 |
| ; PC64LE-NEXT: mffprwz 4, 0 |
| ; PC64LE-NEXT: mtvsrwz 35, 4 |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxws 0, 34 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i32> %result |
| } |
| |
| define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpuxws 0, 1 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha |
| ; PC64LE-NEXT: xscvdpuxws 1, 2 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l |
| ; PC64LE-NEXT: xscvdpuxws 2, 3 |
| ; PC64LE-NEXT: mffprwz 4, 0 |
| ; PC64LE-NEXT: mffprwz 5, 1 |
| ; PC64LE-NEXT: mtvsrwz 34, 4 |
| ; PC64LE-NEXT: mtvsrwz 35, 5 |
| ; PC64LE-NEXT: mffprwz 4, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: mtvsrwz 36, 4 |
| ; PC64LE-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxws 0, 1 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 2 |
| ; PC64LE9-NEXT: mtvsrwz 34, 3 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 3 |
| ; PC64LE9-NEXT: mtvsrwz 35, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: mtvsrwz 36, 3 |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i32> %result |
| } |
| |
| define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: xscvdpuxws 1, 34 |
| ; PC64LE-NEXT: xscvdpuxws 3, 35 |
| ; PC64LE-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE-NEXT: xscvdpuxws 2, 2 |
| ; PC64LE-NEXT: mffprwz 3, 1 |
| ; PC64LE-NEXT: mffprwz 4, 3 |
| ; PC64LE-NEXT: mffprwz 5, 0 |
| ; PC64LE-NEXT: mffprwz 6, 2 |
| ; PC64LE-NEXT: rldimi 5, 3, 32, 0 |
| ; PC64LE-NEXT: rldimi 6, 4, 32, 0 |
| ; PC64LE-NEXT: mtfprd 0, 5 |
| ; PC64LE-NEXT: mtfprd 1, 6 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxws 0, 34 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 4, 0 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 35 |
| ; PC64LE9-NEXT: rldimi 4, 3, 32, 0 |
| ; PC64LE9-NEXT: mffprwz 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 35 |
| ; PC64LE9-NEXT: xscvdpuxws 0, 0 |
| ; PC64LE9-NEXT: mffprwz 5, 0 |
| ; PC64LE9-NEXT: rldimi 5, 3, 32, 0 |
| ; PC64LE9-NEXT: mtvsrdd 34, 5, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64( |
| <4 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i32> %result |
| } |
| |
| define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64(<1 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpuxds 0, 1 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxds 0, 1 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64( |
| <1 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <1 x i64> %result |
| } |
| |
| define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvdpuxds 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvdpuxds 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <2 x i64> %result |
| } |
| |
| define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xscvdpuxds 0, 1 |
| ; PC64LE-NEXT: xscvdpuxds 1, 2 |
| ; PC64LE-NEXT: xscvdpuxds 2, 3 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mffprd 4, 1 |
| ; PC64LE-NEXT: mffprd 5, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xscvdpuxds 0, 1 |
| ; PC64LE9-NEXT: mffprd 3, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 2 |
| ; PC64LE9-NEXT: mffprd 4, 0 |
| ; PC64LE9-NEXT: xscvdpuxds 0, 3 |
| ; PC64LE9-NEXT: mffprd 5, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <3 x i64> %result |
| } |
| |
| define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvdpuxds 35, 35 |
| ; PC64LE-NEXT: xvcvdpuxds 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvdpuxds 35, 35 |
| ; PC64LE9-NEXT: xvcvdpuxds 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64( |
| <4 x double> %x, |
| metadata !"fpexcept.strict") #0 |
| ret <4 x i64> %result |
| } |
| |
| define <1 x float> @constrained_vector_fptrunc_v1f64(<1 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrsp 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrsp 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64( |
| <1 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %result |
| } |
| |
| define <2 x float> @constrained_vector_fptrunc_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xsrsp 1, 34 |
| ; PC64LE-NEXT: xsrsp 0, 0 |
| ; PC64LE-NEXT: xscvdpspn 34, 1 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrsp 0, 34 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xsrsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64( |
| <2 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <2 x float> %result |
| } |
| |
| define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrsp 0, 1 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha |
| ; PC64LE-NEXT: xsrsp 1, 2 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l |
| ; PC64LE-NEXT: xsrsp 2, 3 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xscvdpspn 36, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrsp 0, 1 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: xsrsp 0, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: xsrsp 0, 3 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( |
| <3 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %result |
| } |
| |
| define <4 x float> @constrained_vector_fptrunc_v4f64(<4 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxmrgld 0, 35, 34 |
| ; PC64LE-NEXT: xxmrghd 1, 35, 34 |
| ; PC64LE-NEXT: xvcvdpsp 34, 0 |
| ; PC64LE-NEXT: xvcvdpsp 35, 1 |
| ; PC64LE-NEXT: vmrgew 2, 3, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxmrgld 0, 35, 34 |
| ; PC64LE9-NEXT: xvcvdpsp 36, 0 |
| ; PC64LE9-NEXT: xxmrghd 0, 35, 34 |
| ; PC64LE9-NEXT: xvcvdpsp 34, 0 |
| ; PC64LE9-NEXT: vmrgew 2, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( |
| <4 x double> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #1 |
| ret <4 x float> %result |
| } |
| |
| define <1 x double> @constrained_vector_fpext_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fpext_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fpext_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x double> %result |
| } |
| |
| define <2 x double> @constrained_vector_fpext_v2f32(<2 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fpext_v2f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fpext_v2f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32( |
| <2 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %result |
| } |
| |
| define <3 x double> @constrained_vector_fpext_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fpext_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xxsldwi 4, 34, 34, 3 |
| ; PC64LE-NEXT: xscvspdpn 3, 0 |
| ; PC64LE-NEXT: xscvspdpn 2, 1 |
| ; PC64LE-NEXT: xscvspdpn 1, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fpext_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 3, 0 |
| ; PC64LE9-NEXT: xxswapd 0, 34 |
| ; PC64LE9-NEXT: xscvspdpn 2, 0 |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xscvspdpn 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %result |
| } |
| |
| define <4 x double> @constrained_vector_fpext_v4f32(<4 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_fpext_v4f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: xxsldwi 3, 34, 34, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 34 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 3, 3 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: xxmrghd 35, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_fpext_v4f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: xscvspdpn 1, 34 |
| ; PC64LE9-NEXT: xxmrghd 35, 1, 2 |
| ; PC64LE9-NEXT: xxlor 34, 0, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( |
| <4 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <4 x double> %result |
| } |
| |
| define <1 x float> @constrained_vector_ceil_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_ceil_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrdpip 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_ceil_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrdpip 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %ceil |
| } |
| |
| define <2 x double> @constrained_vector_ceil_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_ceil_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvrdpip 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_ceil_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvrdpip 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %ceil |
| } |
| |
| define <3 x float> @constrained_vector_ceil_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_ceil_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI137_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xsrdpip 0, 0 |
| ; PC64LE-NEXT: xsrdpip 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xsrdpip 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_ceil_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI137_0@toc@l |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xsrdpip 1, 1 |
| ; PC64LE9-NEXT: xsrdpip 2, 2 |
| ; PC64LE9-NEXT: xsrdpip 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %ceil |
| } |
| |
| define <3 x double> @constrained_vector_ceil_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_ceil_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE-NEXT: xsrdpip 3, 3 |
| ; PC64LE-NEXT: xvrdpip 2, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_ceil_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE9-NEXT: xsrdpip 3, 3 |
| ; PC64LE9-NEXT: xvrdpip 2, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %ceil |
| } |
| |
| define <1 x float> @constrained_vector_floor_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_floor_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrdpim 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_floor_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrdpim 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %floor |
| } |
| |
| |
| define <2 x double> @constrained_vector_floor_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_floor_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvrdpim 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_floor_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvrdpim 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %floor |
| } |
| |
| define <3 x float> @constrained_vector_floor_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_floor_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI141_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xsrdpim 0, 0 |
| ; PC64LE-NEXT: xsrdpim 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xsrdpim 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_floor_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI141_0@toc@l |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xsrdpim 1, 1 |
| ; PC64LE9-NEXT: xsrdpim 2, 2 |
| ; PC64LE9-NEXT: xsrdpim 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %floor |
| } |
| |
| define <3 x double> @constrained_vector_floor_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_floor_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE-NEXT: xsrdpim 3, 3 |
| ; PC64LE-NEXT: xvrdpim 2, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_floor_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE9-NEXT: xsrdpim 3, 3 |
| ; PC64LE9-NEXT: xvrdpim 2, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %floor |
| } |
| |
| define <1 x float> @constrained_vector_round_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_round_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrdpi 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_round_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrdpi 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %round = call <1 x float> @llvm.experimental.constrained.round.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %round |
| } |
| |
| define <2 x double> @constrained_vector_round_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_round_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvrdpi 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_round_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvrdpi 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %round = call <2 x double> @llvm.experimental.constrained.round.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %round |
| } |
| |
| define <3 x float> @constrained_vector_round_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_round_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI145_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xsrdpi 0, 0 |
| ; PC64LE-NEXT: xsrdpi 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xsrdpi 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_round_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI145_0@toc@l |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xsrdpi 1, 1 |
| ; PC64LE9-NEXT: xsrdpi 2, 2 |
| ; PC64LE9-NEXT: xsrdpi 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %round = call <3 x float> @llvm.experimental.constrained.round.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %round |
| } |
| |
| |
| define <3 x double> @constrained_vector_round_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_round_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE-NEXT: xsrdpi 3, 3 |
| ; PC64LE-NEXT: xvrdpi 2, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_round_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE9-NEXT: xsrdpi 3, 3 |
| ; PC64LE9-NEXT: xvrdpi 2, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %round = call <3 x double> @llvm.experimental.constrained.round.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %round |
| } |
| |
| define <1 x float> @constrained_vector_trunc_v1f32(<1 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_trunc_v1f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xsrdpiz 1, 1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_trunc_v1f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xsrdpiz 1, 1 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32( |
| <1 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <1 x float> %trunc |
| } |
| |
| define <2 x double> @constrained_vector_trunc_v2f64(<2 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_trunc_v2f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvrdpiz 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_trunc_v2f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvrdpiz 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64( |
| <2 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <2 x double> %trunc |
| } |
| |
| define <3 x float> @constrained_vector_trunc_v3f32(<3 x float> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_trunc_v3f32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: xxswapd 1, 34 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha |
| ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI149_0@toc@l |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvspdpn 0, 0 |
| ; PC64LE-NEXT: xscvspdpn 1, 1 |
| ; PC64LE-NEXT: xscvspdpn 2, 2 |
| ; PC64LE-NEXT: xsrdpiz 0, 0 |
| ; PC64LE-NEXT: xsrdpiz 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xsrdpiz 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_trunc_v3f32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxswapd 1, 34 |
| ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI149_0@toc@l |
| ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 |
| ; PC64LE9-NEXT: xscvspdpn 1, 1 |
| ; PC64LE9-NEXT: xscvspdpn 2, 2 |
| ; PC64LE9-NEXT: xscvspdpn 0, 0 |
| ; PC64LE9-NEXT: xsrdpiz 1, 1 |
| ; PC64LE9-NEXT: xsrdpiz 2, 2 |
| ; PC64LE9-NEXT: xsrdpiz 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 1 |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32( |
| <3 x float> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x float> %trunc |
| } |
| |
| define <3 x double> @constrained_vector_trunc_v3f64(<3 x double> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_trunc_v3f64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE-NEXT: xsrdpiz 3, 3 |
| ; PC64LE-NEXT: xvrdpiz 2, 0 |
| ; PC64LE-NEXT: xxswapd 1, 2 |
| ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_trunc_v3f64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 |
| ; PC64LE9-NEXT: xxmrghd 0, 2, 1 |
| ; PC64LE9-NEXT: xsrdpiz 3, 3 |
| ; PC64LE9-NEXT: xvrdpiz 2, 0 |
| ; PC64LE9-NEXT: xxswapd 1, 2 |
| ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 |
| ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64( |
| <3 x double> %x, |
| metadata !"fpexcept.strict") #1 |
| ret <3 x double> %trunc |
| } |
| |
| define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprwa 0, 3 |
| ; PC64LE-NEXT: xscvsxddp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: xscvsxddp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x double> |
| @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x double> %result |
| } |
| |
| define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprwa 0, 3 |
| ; PC64LE-NEXT: xscvsxdsp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: xscvsxdsp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x float> |
| @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x float> %result |
| } |
| |
| define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: xscvsxddp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvsxddp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x double> |
| @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x double> %result |
| } |
| |
| define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: xscvsxdsp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvsxdsp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x float> |
| @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x float> %result |
| } |
| |
| define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha |
| ; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha |
| ; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l |
| ; PC64LE-NEXT: lxvd2x 0, 0, 3 |
| ; PC64LE-NEXT: vperm 2, 2, 2, 3 |
| ; PC64LE-NEXT: xxswapd 35, 0 |
| ; PC64LE-NEXT: vsld 2, 2, 3 |
| ; PC64LE-NEXT: vsrad 2, 2, 3 |
| ; PC64LE-NEXT: xvcvsxddp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 2, 2, 3 |
| ; PC64LE9-NEXT: vextsh2d 2, 2 |
| ; PC64LE9-NEXT: xvcvsxddp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> |
| @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x double> %result |
| } |
| |
| define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwa 0, 3 |
| ; PC64LE-NEXT: mtfprwa 1, 4 |
| ; PC64LE-NEXT: xscvsxddp 0, 0 |
| ; PC64LE-NEXT: xscvsxddp 1, 1 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvsxddp 0, 0 |
| ; PC64LE9-NEXT: mtfprwa 1, 3 |
| ; PC64LE9-NEXT: xscvsxddp 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> |
| @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x double> %result |
| } |
| |
| define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwa 0, 3 |
| ; PC64LE-NEXT: mtfprwa 1, 4 |
| ; PC64LE-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x float> |
| @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x float> %result |
| } |
| |
| define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvsxddp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvsxddp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> |
| @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x double> %result |
| } |
| |
| define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: mfvsrd 3, 34 |
| ; PC64LE-NEXT: mffprd 4, 0 |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mtfprd 1, 4 |
| ; PC64LE-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mfvsrld 3, 34 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: mfvsrd 3, 34 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x float> |
| @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x float> %result |
| } |
| |
| define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mfvsrwz 3, 34 |
| ; PC64LE-NEXT: mtfprwa 3, 3 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwa 0, 3 |
| ; PC64LE-NEXT: mtfprwa 2, 4 |
| ; PC64LE-NEXT: xscvsxddp 1, 0 |
| ; PC64LE-NEXT: xscvsxddp 2, 2 |
| ; PC64LE-NEXT: xscvsxddp 3, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvsxddp 1, 0 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: mfvsrwz 3, 34 |
| ; PC64LE9-NEXT: xscvsxddp 2, 0 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: xscvsxddp 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x double> |
| @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x double> %result |
| } |
| |
| define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwa 0, 3 |
| ; PC64LE-NEXT: mtfprwa 1, 4 |
| ; PC64LE-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE-NEXT: mfvsrwz 3, 34 |
| ; PC64LE-NEXT: mtfprwa 2, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha |
| ; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xscvsxdsp 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 3, 4, 3 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: mfvsrwz 3, 34 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vperm 2, 2, 3, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x float> |
| @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x float> %result |
| } |
| |
| define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mtfprd 2, 4 |
| ; PC64LE-NEXT: mtfprd 3, 5 |
| ; PC64LE-NEXT: xscvsxddp 1, 0 |
| ; PC64LE-NEXT: xscvsxddp 2, 2 |
| ; PC64LE-NEXT: xscvsxddp 3, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvsxddp 1, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 4 |
| ; PC64LE9-NEXT: xscvsxddp 2, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 5 |
| ; PC64LE9-NEXT: xscvsxddp 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x double> |
| @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x double> %result |
| } |
| |
| define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha |
| ; PC64LE-NEXT: mtfprd 1, 4 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l |
| ; PC64LE-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE-NEXT: mtfprd 2, 5 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xscvsxdsp 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 4 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 5 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x float> |
| @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x float> %result |
| } |
| |
| define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: mfvsrwz 3, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mtfprwa 2, 3 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwa 1, 3 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mtfprwa 3, 4 |
| ; PC64LE-NEXT: xscvsxddp 0, 2 |
| ; PC64LE-NEXT: mtfprwa 2, 3 |
| ; PC64LE-NEXT: xscvsxddp 1, 1 |
| ; PC64LE-NEXT: xscvsxddp 3, 3 |
| ; PC64LE-NEXT: xscvsxddp 2, 2 |
| ; PC64LE-NEXT: xxmrghd 34, 3, 1 |
| ; PC64LE-NEXT: xxmrghd 35, 2, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwa 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvsxddp 0, 0 |
| ; PC64LE9-NEXT: mtfprwa 1, 3 |
| ; PC64LE9-NEXT: li 3, 12 |
| ; PC64LE9-NEXT: xscvsxddp 1, 1 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: mtfprwa 1, 3 |
| ; PC64LE9-NEXT: mfvsrwz 3, 34 |
| ; PC64LE9-NEXT: mtfprwa 2, 3 |
| ; PC64LE9-NEXT: xscvsxddp 1, 1 |
| ; PC64LE9-NEXT: xscvsxddp 2, 2 |
| ; PC64LE9-NEXT: xxlor 34, 0, 0 |
| ; PC64LE9-NEXT: xxmrghd 35, 1, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x double> |
| @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x double> %result |
| } |
| |
| define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: vmrglh 2, 2, 2 |
| ; PC64LE-NEXT: vspltisw 3, 8 |
| ; PC64LE-NEXT: vadduwm 3, 3, 3 |
| ; PC64LE-NEXT: vslw 2, 2, 3 |
| ; PC64LE-NEXT: vsraw 2, 2, 3 |
| ; PC64LE-NEXT: xvcvsxwsp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: vmrglh 2, 2, 2 |
| ; PC64LE9-NEXT: vextsh2w 2, 2 |
| ; PC64LE9-NEXT: xvcvsxwsp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> |
| @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x float> %result |
| } |
| |
| define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvsxwsp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvsxwsp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> |
| @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x float> %result |
| } |
| |
| define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvsxddp 35, 35 |
| ; PC64LE-NEXT: xvcvsxddp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvsxddp 35, 35 |
| ; PC64LE9-NEXT: xvcvsxddp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x double> |
| @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x double> %result |
| } |
| |
| define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: mfvsrd 3, 34 |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: mfvsrd 4, 35 |
| ; PC64LE-NEXT: mtfprd 1, 3 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mtfprd 0, 4 |
| ; PC64LE-NEXT: mtfprd 3, 3 |
| ; PC64LE-NEXT: mffprd 3, 2 |
| ; PC64LE-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE-NEXT: mtfprd 2, 3 |
| ; PC64LE-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE-NEXT: xscvsxdsp 3, 3 |
| ; PC64LE-NEXT: xscvsxdsp 2, 2 |
| ; PC64LE-NEXT: xxmrghd 0, 0, 1 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 3 |
| ; PC64LE-NEXT: xvcvdpsp 34, 0 |
| ; PC64LE-NEXT: xvcvdpsp 35, 1 |
| ; PC64LE-NEXT: vmrgew 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mfvsrld 3, 34 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: mfvsrld 3, 35 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: mtfprd 1, 3 |
| ; PC64LE9-NEXT: mfvsrd 3, 34 |
| ; PC64LE9-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: xvcvdpsp 36, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: mfvsrd 3, 35 |
| ; PC64LE9-NEXT: mtfprd 1, 3 |
| ; PC64LE9-NEXT: xscvsxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvsxdsp 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: xvcvdpsp 34, 0 |
| ; PC64LE9-NEXT: vmrgew 2, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> |
| @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x float> %result |
| } |
| |
| define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprwz 0, 3 |
| ; PC64LE-NEXT: xscvuxddp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: xscvuxddp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x double> |
| @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x double> %result |
| } |
| |
| define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprwz 0, 3 |
| ; PC64LE-NEXT: xscvuxdsp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: xscvuxdsp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x float> |
| @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x float> %result |
| } |
| |
| define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: xscvuxddp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvuxddp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x double> |
| @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x double> %result |
| } |
| |
| define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: xscvuxdsp 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvuxdsp 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <1 x float> |
| @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <1 x float> %result |
| } |
| |
| define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha |
| ; PC64LE-NEXT: xxlxor 36, 36, 36 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l |
| ; PC64LE-NEXT: lvx 3, 0, 3 |
| ; PC64LE-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE-NEXT: xvcvuxddp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha |
| ; PC64LE9-NEXT: xxlxor 36, 36, 36 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: xvcvuxddp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> |
| @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x double> %result |
| } |
| |
| define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwz 0, 3 |
| ; PC64LE-NEXT: mtfprwz 1, 4 |
| ; PC64LE-NEXT: xscvuxddp 0, 0 |
| ; PC64LE-NEXT: xscvuxddp 1, 1 |
| ; PC64LE-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvuxddp 0, 0 |
| ; PC64LE9-NEXT: mtfprwz 1, 3 |
| ; PC64LE9-NEXT: xscvuxddp 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 34, 1, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> |
| @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x double> %result |
| } |
| |
| define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwz 0, 3 |
| ; PC64LE-NEXT: mtfprwz 1, 4 |
| ; PC64LE-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x float> |
| @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x float> %result |
| } |
| |
| define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvuxddp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvuxddp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x double> |
| @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x double> %result |
| } |
| |
| define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: mfvsrd 3, 34 |
| ; PC64LE-NEXT: mffprd 4, 0 |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mtfprd 1, 4 |
| ; PC64LE-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mfvsrld 3, 34 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: mfvsrd 3, 34 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <2 x float> |
| @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <2 x float> %result |
| } |
| |
| define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mfvsrwz 3, 34 |
| ; PC64LE-NEXT: mtfprwz 3, 3 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwz 0, 3 |
| ; PC64LE-NEXT: mtfprwz 2, 4 |
| ; PC64LE-NEXT: xscvuxddp 1, 0 |
| ; PC64LE-NEXT: xscvuxddp 2, 2 |
| ; PC64LE-NEXT: xscvuxddp 3, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvuxddp 1, 0 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: mfvsrwz 3, 34 |
| ; PC64LE9-NEXT: xscvuxddp 2, 0 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: xscvuxddp 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x double> |
| @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x double> %result |
| } |
| |
| define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwz 0, 3 |
| ; PC64LE-NEXT: mtfprwz 1, 4 |
| ; PC64LE-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE-NEXT: mfvsrwz 3, 34 |
| ; PC64LE-NEXT: mtfprwz 2, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha |
| ; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xscvuxdsp 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vmrghw 3, 4, 3 |
| ; PC64LE9-NEXT: lxv 36, 0(3) |
| ; PC64LE9-NEXT: mfvsrwz 3, 34 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: vperm 2, 2, 3, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x float> |
| @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x float> %result |
| } |
| |
| define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: mtfprd 2, 4 |
| ; PC64LE-NEXT: mtfprd 3, 5 |
| ; PC64LE-NEXT: xscvuxddp 1, 0 |
| ; PC64LE-NEXT: xscvuxddp 2, 2 |
| ; PC64LE-NEXT: xscvuxddp 3, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: xscvuxddp 1, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 4 |
| ; PC64LE9-NEXT: xscvuxddp 2, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 5 |
| ; PC64LE9-NEXT: xscvuxddp 3, 0 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x double> |
| @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x double> %result |
| } |
| |
| define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: mtfprd 0, 3 |
| ; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha |
| ; PC64LE-NEXT: mtfprd 1, 4 |
| ; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l |
| ; PC64LE-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE-NEXT: lvx 4, 0, 3 |
| ; PC64LE-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE-NEXT: mtfprd 2, 5 |
| ; PC64LE-NEXT: xscvdpspn 34, 0 |
| ; PC64LE-NEXT: xscvdpspn 35, 1 |
| ; PC64LE-NEXT: xscvuxdsp 0, 2 |
| ; PC64LE-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE-NEXT: xscvdpspn 35, 0 |
| ; PC64LE-NEXT: vperm 2, 3, 2, 4 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l |
| ; PC64LE9-NEXT: xscvdpspn 34, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 4 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvdpspn 35, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 5 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: vmrghw 2, 3, 2 |
| ; PC64LE9-NEXT: lxv 35, 0(3) |
| ; PC64LE9-NEXT: xscvdpspn 36, 0 |
| ; PC64LE9-NEXT: vperm 2, 4, 2, 3 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <3 x float> |
| @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <3 x float> %result |
| } |
| |
| define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: mfvsrwz 3, 34 |
| ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 |
| ; PC64LE-NEXT: mtfprwz 2, 3 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 |
| ; PC64LE-NEXT: mffprwz 4, 1 |
| ; PC64LE-NEXT: mtfprwz 1, 3 |
| ; PC64LE-NEXT: mffprwz 3, 0 |
| ; PC64LE-NEXT: mtfprwz 3, 4 |
| ; PC64LE-NEXT: xscvuxddp 0, 2 |
| ; PC64LE-NEXT: mtfprwz 2, 3 |
| ; PC64LE-NEXT: xscvuxddp 1, 1 |
| ; PC64LE-NEXT: xscvuxddp 3, 3 |
| ; PC64LE-NEXT: xscvuxddp 2, 2 |
| ; PC64LE-NEXT: xxmrghd 34, 3, 1 |
| ; PC64LE-NEXT: xxmrghd 35, 2, 0 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: li 3, 0 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: mtfprwz 0, 3 |
| ; PC64LE9-NEXT: li 3, 4 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xscvuxddp 0, 0 |
| ; PC64LE9-NEXT: mtfprwz 1, 3 |
| ; PC64LE9-NEXT: li 3, 12 |
| ; PC64LE9-NEXT: xscvuxddp 1, 1 |
| ; PC64LE9-NEXT: vextuwrx 3, 3, 2 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: mtfprwz 1, 3 |
| ; PC64LE9-NEXT: mfvsrwz 3, 34 |
| ; PC64LE9-NEXT: mtfprwz 2, 3 |
| ; PC64LE9-NEXT: xscvuxddp 1, 1 |
| ; PC64LE9-NEXT: xscvuxddp 2, 2 |
| ; PC64LE9-NEXT: xxlor 34, 0, 0 |
| ; PC64LE9-NEXT: xxmrghd 35, 1, 2 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x double> |
| @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x double> %result |
| } |
| |
| define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxlxor 35, 35, 35 |
| ; PC64LE-NEXT: vmrglh 2, 3, 2 |
| ; PC64LE-NEXT: xvcvuxwsp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xxlxor 35, 35, 35 |
| ; PC64LE9-NEXT: vmrglh 2, 3, 2 |
| ; PC64LE9-NEXT: xvcvuxwsp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> |
| @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x float> %result |
| } |
| |
| define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvuxwsp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvuxwsp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> |
| @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x float> %result |
| } |
| |
| define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xvcvuxddp 35, 35 |
| ; PC64LE-NEXT: xvcvuxddp 34, 34 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: xvcvuxddp 35, 35 |
| ; PC64LE9-NEXT: xvcvuxddp 34, 34 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x double> |
| @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x double> %result |
| } |
| |
| define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 { |
| ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64: |
| ; PC64LE: # %bb.0: # %entry |
| ; PC64LE-NEXT: xxswapd 0, 34 |
| ; PC64LE-NEXT: mfvsrd 3, 34 |
| ; PC64LE-NEXT: xxswapd 2, 35 |
| ; PC64LE-NEXT: mfvsrd 4, 35 |
| ; PC64LE-NEXT: mtfprd 1, 3 |
| ; PC64LE-NEXT: mffprd 3, 0 |
| ; PC64LE-NEXT: mtfprd 0, 4 |
| ; PC64LE-NEXT: mtfprd 3, 3 |
| ; PC64LE-NEXT: mffprd 3, 2 |
| ; PC64LE-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE-NEXT: mtfprd 2, 3 |
| ; PC64LE-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE-NEXT: xscvuxdsp 3, 3 |
| ; PC64LE-NEXT: xscvuxdsp 2, 2 |
| ; PC64LE-NEXT: xxmrghd 0, 0, 1 |
| ; PC64LE-NEXT: xxmrghd 1, 2, 3 |
| ; PC64LE-NEXT: xvcvdpsp 34, 0 |
| ; PC64LE-NEXT: xvcvdpsp 35, 1 |
| ; PC64LE-NEXT: vmrgew 2, 2, 3 |
| ; PC64LE-NEXT: blr |
| ; |
| ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64: |
| ; PC64LE9: # %bb.0: # %entry |
| ; PC64LE9-NEXT: mfvsrld 3, 34 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: mfvsrld 3, 35 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: mtfprd 1, 3 |
| ; PC64LE9-NEXT: mfvsrd 3, 34 |
| ; PC64LE9-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: xvcvdpsp 36, 0 |
| ; PC64LE9-NEXT: mtfprd 0, 3 |
| ; PC64LE9-NEXT: mfvsrd 3, 35 |
| ; PC64LE9-NEXT: mtfprd 1, 3 |
| ; PC64LE9-NEXT: xscvuxdsp 0, 0 |
| ; PC64LE9-NEXT: xscvuxdsp 1, 1 |
| ; PC64LE9-NEXT: xxmrghd 0, 1, 0 |
| ; PC64LE9-NEXT: xvcvdpsp 34, 0 |
| ; PC64LE9-NEXT: vmrgew 2, 2, 4 |
| ; PC64LE9-NEXT: blr |
| entry: |
| %result = call <4 x float> |
| @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x, |
| metadata !"round.dynamic", |
| metadata !"fpexcept.strict") #0 |
| ret <4 x float> %result |
| } |
| |
| attributes #0 = { nounwind strictfp noimplicitfloat } |
| attributes #1 = { strictfp } |
| |
| ; Single width declarations |
| declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata) |
| declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata) |
| declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata) |
| declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata) |
| declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata) |
| declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata) |
| declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata) |
| declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata) |
| declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata) |
| declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata) |
| declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata) |
| declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata) |
| declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata) |
| declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata) |
| declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata) |
| declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) |
| declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) |
| declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) |
| declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) |
| declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) |
| declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) |
| |
| ; Scalar width declarations |
| declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata) |
| declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata) |
| declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata) |
| declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata) |
| declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata) |
| declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata) |
| declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata) |
| declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata) |
| declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata) |
| declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata) |
| declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata) |
| declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata) |
| declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata) |
| declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata) |
| declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata) |
| declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata) |
| declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) |
| declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) |
| declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) |
| declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) |
| declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) |
| |
| ; Illegal width declarations |
| declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata) |
| declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata) |
| declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata) |
| declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata) |
| declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata) |
| declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata) |
| declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata) |
| declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata) |
| declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata) |
| declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata) |
| declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata) |
| declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata) |
| declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata) |
| declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata) |
| declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata) |
| declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) |
| declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) |
| declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) |
| |
| ; Double width declarations |
| declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata) |
| declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata) |
| declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata) |
| declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata) |
| declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata) |
| declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata) |
| declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata) |
| declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata) |
| declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata) |
| declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata) |
| declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata) |
| declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata) |
| declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata) |
| declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata) |
| declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata) |
| declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) |
| declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) |
| declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) |
| declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) |
| declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) |
| declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) |
| declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) |