+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu -ppc-vsr-nums-as-vr \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unknown-linux-gnu -ppc-vsr-nums-as-vr \
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrdd v2, r4, r3
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: mtvsrdd v2, r3, r4
; CHECK-BE-NEXT: blr
+
entry:
; The FIXME below is due to the lowering for BUILD_VECTOR needing a re-vamp
; which will happen in a subsequent patch.
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mfvsrld r3, v2
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test2:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: mfvsrd r3, v2
; CHECK-BE-NEXT: blr
+
entry:
%0 = extractelement <2 x i64> %a, i32 0
ret i64 %0
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mfvsrd r3, v2
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test3:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: mfvsrld r3, v2
; CHECK-BE-NEXT: blr
+
entry:
%0 = extractelement <2 x i64> %a, i32 1
ret i64 %0
; CHECK-NEXT: xxpermdi vs0, f0, f0, 2
; CHECK-NEXT: xxspltw v2, vs0, 3
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test4:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: lfiwzx f0, 0, r3
; CHECK-BE-NEXT: xxsldwi vs0, f0, f0, 1
; CHECK-BE-NEXT: xxspltw v2, vs0, 0
; CHECK-BE-NEXT: blr
+
entry:
%0 = load i32, i32* %in, align 4
%splat.splatinsert = insertelement <4 x i32> undef, i32 %0, i32 0
; CHECK-NEXT: xxpermdi vs0, f0, f0, 2
; CHECK-NEXT: xxspltw v2, vs0, 3
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test5:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: lfiwzx f0, 0, r3
; CHECK-BE-NEXT: xxsldwi vs0, f0, f0, 1
; CHECK-BE-NEXT: xxspltw v2, vs0, 0
; CHECK-BE-NEXT: blr
+
entry:
%0 = load float, float* %in, align 4
%splat.splatinsert = insertelement <4 x float> undef, float %0, i32 0
; CHECK-NEXT: xxpermdi vs0, f0, f0, 2
; CHECK-NEXT: xxspltw v2, vs0, 3
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test6:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: addis r3, r2, .LC0@toc@ha
; CHECK-BE-NEXT: xxsldwi vs0, f0, f0, 1
; CHECK-BE-NEXT: xxspltw v2, vs0, 0
; CHECK-BE-NEXT: blr
+
entry:
%0 = load i32, i32* @Globi, align 4
%splat.splatinsert = insertelement <4 x i32> undef, i32 %0, i32 0
; CHECK-NEXT: xxpermdi vs0, f0, f0, 2
; CHECK-NEXT: xxspltw v2, vs0, 3
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test7:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: addis r3, r2, .LC1@toc@ha
; CHECK-BE-NEXT: xxsldwi vs0, f0, f0, 1
; CHECK-BE-NEXT: xxspltw v2, vs0, 0
; CHECK-BE-NEXT: blr
+
entry:
%0 = load float, float* @Globf, align 4
%splat.splatinsert = insertelement <4 x float> undef, float %0, i32 0
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxlxor v2, v2, v2
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test8:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxlxor v2, v2, v2
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> zeroinitializer
}
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltib v2, 1
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test9:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltib v2, 1
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
}
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltib v2, 127
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test10:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltib v2, 127
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>
}
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltib v2, 128
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test11:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltib v2, 128
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
}
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltib v2, 255
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test12:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltib v2, 255
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
}
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltib v2, 129
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test13:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltib v2, 129
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>
}
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltib v2, 200
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test13E127:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltib v2, 200
; CHECK-BE-NEXT: blr
+
entry:
ret <16 x i8> <i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200, i8 200>
}
; CHECK-NEXT: addi r3, r3, 5
; CHECK-NEXT: stw r3, 0(r5)
; CHECK-NEXT: blr
-
+;
; CHECK-BE-LABEL: test14:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: lwz r3, 0(r5)
; CHECK-BE-NEXT: addi r3, r3, 5
; CHECK-BE-NEXT: stw r3, 0(r5)
; CHECK-BE-NEXT: blr
+
entry:
%0 = load i32, i32* %b, align 4
%splat.splatinsert = insertelement <4 x i32> undef, i32 %0, i32 0