1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00
llvm-mirror/test/CodeGen/PowerPC/xxpermdi_mnemonics.s
Sean Fertile bb42a307cd [PowerPC][AIX]Do not emit xxspltd mnemonic on AIX.
A bug in the system assembler can assemble the xxspltd extended
menemonic into the wrong instruction (extracting the wrong element).
Emit the full xxpermdi with all operands to work around the problem.

Differential Revision: https://reviews.llvm.org/D94419
2021-01-18 09:25:31 -05:00

54 lines
1.8 KiB
ArmAsm

; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 --vec-extabi < %s | FileCheck --check-prefixes=CHECK,OLD %s
; RUN: llc -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 --vec-extabi < %s | FileCheck --check-prefixes=CHECK,OLD %s
; RUN: llc -mtriple powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck --check-prefixes=CHECK,MODERN %s
; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 -mattr=+modern-aix-as --vec-extabi < %s | FileCheck --check-prefixes=CHECK,MODERN %s
; RUN: llc -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 -mattr=+modern-aix-as --vec-extabi < %s | FileCheck --check-prefixes=CHECK,MODERN %s
define <2 x double> @splat1(<2 x double> %A, <2 x double> %B) {
entry:
%0 = shufflevector <2 x double> %B, <2 x double> undef, <2 x i32> <i32 0, i32 0>
ret <2 x double> %0
}
; CHECK-LABEL: splat1
; OLD: xxmrghd 34, 35, 35
; MODERN: xxspltd 34, 35, 0
define <2 x double> @splat2(<2 x double> %A, <2 x double> %B) {
entry:
%0 = shufflevector <2 x double> %B, <2 x double> undef, <2 x i32> <i32 1, i32 1>
ret <2 x double> %0
}
; CHECK-LABEL: splat2
; OLD: xxmrgld 34, 35, 35
; MODERN: xxspltd 34, 35, 1
define <2 x double> @swap(<2 x double> %A, <2 x double> %B) {
entry:
%0 = shufflevector <2 x double> %B, <2 x double> undef, <2 x i32> <i32 1, i32 0>
ret <2 x double> %0
}
; CHECK-LABEL: swap
; CHECK: xxswapd 34, 35
define <2 x double> @mergehi(<2 x double> %A, <2 x double> %B) {
entry:
%0 = shufflevector <2 x double> %A, <2 x double> %B, <2 x i32> <i32 0, i32 2>
ret <2 x double> %0
}
; CHECK-LABEL: mergehi
; CHECK: xxmrghd 34, 34, 35
define <2 x double> @mergelo(<2 x double> %A, <2 x double> %B) {
entry:
%0 = shufflevector <2 x double> %A, <2 x double> %B, <2 x i32> <i32 1, i32 3>
ret <2 x double> %0
}
; CHECK-LABEL: mergelo
; CHECK: xxmrgld 34, 34, 35