1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00
llvm-mirror/test/CodeGen/PowerPC/vsx_scalar_ld_st.ll
Nemanja Ivanovic 285f278c18 Scalar to vector conversions using direct moves
This patch corresponds to review:
http://reviews.llvm.org/D11471

It improves the code generated for converting a scalar to a vector value. With
direct moves from GPRs to VSRs, we no longer require expensive stack operations
for this. Subsequent patches will handle the reverse case and more general
operations between vectors and their scalar elements.

llvm-svn: 244921
2015-08-13 17:40:44 +00:00

138 lines
3.5 KiB
LLVM

; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-direct-move | FileCheck %s
; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-direct-move | FileCheck %s
@d = common global double 0.000000e+00, align 8
@f = common global float 0.000000e+00, align 4
@i = common global i32 0, align 4
@ui = common global i32 0, align 4
; Function Attrs: nounwind
define void @dblToInt() #0 {
entry:
%ii = alloca i32, align 4
%0 = load double, double* @d, align 8
%conv = fptosi double %0 to i32
store volatile i32 %conv, i32* %ii, align 4
ret void
; CHECK-LABEL: @dblToInt
; CHECK: xscvdpsxws [[REGCONV1:[0-9]+]],
; CHECK: stxsiwx [[REGCONV1]],
}
; Function Attrs: nounwind
define void @fltToInt() #0 {
entry:
%ii = alloca i32, align 4
%0 = load float, float* @f, align 4
%conv = fptosi float %0 to i32
store volatile i32 %conv, i32* %ii, align 4
ret void
; CHECK-LABEL: @fltToInt
; CHECK: xscvdpsxws [[REGCONV2:[0-9]+]],
; CHECK: stxsiwx [[REGCONV2]],
}
; Function Attrs: nounwind
define void @intToDbl() #0 {
entry:
%dd = alloca double, align 8
%0 = load i32, i32* @i, align 4
%conv = sitofp i32 %0 to double
store volatile double %conv, double* %dd, align 8
ret void
; CHECK-LABEL: @intToDbl
; CHECK: lxsiwax [[REGLD1:[0-9]+]],
; CHECK: xscvsxddp {{[0-9]+}}, [[REGLD1]]
}
; Function Attrs: nounwind
define void @intToFlt() #0 {
entry:
%ff = alloca float, align 4
%0 = load i32, i32* @i, align 4
%conv = sitofp i32 %0 to float
store volatile float %conv, float* %ff, align 4
ret void
; CHECK-LABEL: @intToFlt
; CHECK: lxsiwax [[REGLD2:[0-9]+]],
; CHECK: xscvsxdsp {{[0-9]}}, [[REGLD2]]
}
; Function Attrs: nounwind
define void @dblToUInt() #0 {
entry:
%uiui = alloca i32, align 4
%0 = load double, double* @d, align 8
%conv = fptoui double %0 to i32
store volatile i32 %conv, i32* %uiui, align 4
ret void
; CHECK-LABEL: @dblToUInt
; CHECK: xscvdpuxws [[REGCONV3:[0-9]+]],
; CHECK: stxsiwx [[REGCONV3]],
}
; Function Attrs: nounwind
define void @fltToUInt() #0 {
entry:
%uiui = alloca i32, align 4
%0 = load float, float* @f, align 4
%conv = fptoui float %0 to i32
store volatile i32 %conv, i32* %uiui, align 4
ret void
; CHECK-LABEL: @fltToUInt
; CHECK: xscvdpuxws [[REGCONV4:[0-9]+]],
; CHECK: stxsiwx [[REGCONV4]],
}
; Function Attrs: nounwind
define void @uIntToDbl() #0 {
entry:
%dd = alloca double, align 8
%0 = load i32, i32* @ui, align 4
%conv = uitofp i32 %0 to double
store volatile double %conv, double* %dd, align 8
ret void
; CHECK-LABEL: @uIntToDbl
; CHECK: lxsiwzx [[REGLD3:[0-9]+]],
; CHECK: xscvuxddp {{[0-9]+}}, [[REGLD3]]
}
; Function Attrs: nounwind
define void @uIntToFlt() #0 {
entry:
%ff = alloca float, align 4
%0 = load i32, i32* @ui, align 4
%conv = uitofp i32 %0 to float
store volatile float %conv, float* %ff, align 4
ret void
; CHECK-LABEL: @uIntToFlt
; CHECK: lxsiwzx [[REGLD4:[0-9]+]],
; CHECK: xscvuxdsp {{[0-9]+}}, [[REGLD4]]
}
; Function Attrs: nounwind
define void @dblToFloat() #0 {
entry:
%ff = alloca float, align 4
%0 = load double, double* @d, align 8
%conv = fptrunc double %0 to float
store volatile float %conv, float* %ff, align 4
ret void
; CHECK-LABEL: @dblToFloat
; CHECK: lxsdx [[REGLD5:[0-9]+]],
; CHECK: stxsspx [[REGLD5]],
}
; Function Attrs: nounwind
define void @floatToDbl() #0 {
entry:
%dd = alloca double, align 8
%0 = load float, float* @f, align 4
%conv = fpext float %0 to double
store volatile double %conv, double* %dd, align 8
ret void
; CHECK-LABEL: @floatToDbl
; CHECK: lxsspx [[REGLD5:[0-9]+]],
; CHECK: stxsdx [[REGLD5]],
}