2019-08-23 04:42:50 +08:00
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2018-08-28 09:18:29 +08:00
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu -mattr=+altivec -disable-ppc-ilp-pref | FileCheck %s
2009-11-21 08:53:23 +08:00
; Formerly this did byte loads and word stores.
@a = external global < 16 x i8 >
@b = external global < 16 x i8 >
@c = external global < 16 x i8 >
define void @foo ( ) nounwind ssp {
2019-08-23 04:42:50 +08:00
; CHECK-LABEL: foo:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: li 3, a@l
; CHECK-NEXT: lis 4, a@ha
; CHECK-NEXT: lvx 2, 4, 3
; CHECK-NEXT: li 3, .LCPI0_0@l
; CHECK-NEXT: lis 4, .LCPI0_0@ha
; CHECK-NEXT: lvx 3, 4, 3
; CHECK-NEXT: vxor 4, 4, 4
; CHECK-NEXT: li 3, c@l
; CHECK-NEXT: lis 4, c@ha
; CHECK-NEXT: vperm 2, 4, 2, 3
; CHECK-NEXT: stvx 2, 4, 3
; CHECK-NEXT: blr
2009-11-21 08:53:23 +08:00
entry:
2015-02-28 05:17:42 +08:00
%tmp0 = load < 16 x i8 > , < 16 x i8 > * @a , align 16
2009-11-21 08:53:23 +08:00
%tmp180.i = extractelement < 16 x i8 > %tmp0 , i32 0 ; <i8> [#uses=1]
%tmp181.i = insertelement < 16 x i8 > < i8 0 , i8 0 , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef , i8 undef > , i8 %tmp180.i , i32 2 ; <<16 x i8>> [#uses=1]
%tmp182.i = extractelement < 16 x i8 > %tmp0 , i32 1 ; <i8> [#uses=1]
%tmp183.i = insertelement < 16 x i8 > %tmp181.i , i8 %tmp182.i , i32 3 ; <<16 x i8>> [#uses=1]
%tmp184.i = insertelement < 16 x i8 > %tmp183.i , i8 0 , i32 4 ; <<16 x i8>> [#uses=1]
%tmp185.i = insertelement < 16 x i8 > %tmp184.i , i8 0 , i32 5 ; <<16 x i8>> [#uses=1]
%tmp186.i = extractelement < 16 x i8 > %tmp0 , i32 4 ; <i8> [#uses=1]
%tmp187.i = insertelement < 16 x i8 > %tmp185.i , i8 %tmp186.i , i32 6 ; <<16 x i8>> [#uses=1]
%tmp188.i = extractelement < 16 x i8 > %tmp0 , i32 5 ; <i8> [#uses=1]
%tmp189.i = insertelement < 16 x i8 > %tmp187.i , i8 %tmp188.i , i32 7 ; <<16 x i8>> [#uses=1]
%tmp190.i = insertelement < 16 x i8 > %tmp189.i , i8 0 , i32 8 ; <<16 x i8>> [#uses=1]
%tmp191.i = insertelement < 16 x i8 > %tmp190.i , i8 0 , i32 9 ; <<16 x i8>> [#uses=1]
%tmp192.i = extractelement < 16 x i8 > %tmp0 , i32 8 ; <i8> [#uses=1]
%tmp193.i = insertelement < 16 x i8 > %tmp191.i , i8 %tmp192.i , i32 10 ; <<16 x i8>> [#uses=1]
%tmp194.i = extractelement < 16 x i8 > %tmp0 , i32 9 ; <i8> [#uses=1]
%tmp195.i = insertelement < 16 x i8 > %tmp193.i , i8 %tmp194.i , i32 11 ; <<16 x i8>> [#uses=1]
%tmp196.i = insertelement < 16 x i8 > %tmp195.i , i8 0 , i32 12 ; <<16 x i8>> [#uses=1]
%tmp197.i = insertelement < 16 x i8 > %tmp196.i , i8 0 , i32 13 ; <<16 x i8>> [#uses=1]
%tmp201 = shufflevector < 16 x i8 > %tmp197.i , < 16 x i8 > %tmp0 , < 16 x i32 > < i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 28 , i32 29 > ; ModuleID = 'try.c'
store < 16 x i8 > %tmp201 , < 16 x i8 > * @c , align 16
br label %return
return: ; preds = %bb2
ret void
}