1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
; RUN: FileCheck %s
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
; RUN: FileCheck %s --check-prefix=CHECK-BE
%96 = type <{ i32 }>
%97 = type <{ i32 }>
%98 = type <{ i32 }>
%100 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64] }>
%101 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64], [24 x i8] }>
%102 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64] }>
%103 = type <{ [152 x i8]*, i8, i8, i8, i8, [4 x i8], i32, [12 x i8], i32, [4 x i8] }>
%104 = type <{ i32 }>
%105 = type <{ i32 }>
%106 = type <{ i32 }>
; Function Attrs: nobuiltin norecurse
define dso_local signext i32 @test_FI_elim([40 x i8]* noalias nocapture dereferenceable(40) %arg, [0 x %96]* noalias nocapture nonnull readonly %arg2, [0 x %97]* noalias nocapture nonnull readonly %arg3, [0 x %98]* noalias nocapture nonnull readonly %arg4, %100* noalias nocapture dereferenceable(48) %arg6, %101* noalias nocapture dereferenceable(72) %arg7) local_unnamed_addr #2 {
; CHECK-LABEL: test_FI_elim:
; CHECK: # %bb.0: # %bb
; CHECK-NEXT: mflr r0
; CHECK-NEXT: std r0, 16(r1)
; CHECK-NEXT: stdu r1, -80(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 80
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: lxv v2, 0(r3)
; CHECK-NEXT: mr r9, r6
; CHECK-NEXT: mr r6, r5
; CHECK-NEXT: li r0, 4
; CHECK-NEXT: li r11, 3
; CHECK-NEXT: std r0, 0(r3)
; CHECK-NEXT: stb r11, 0(0)
; CHECK-NEXT: li r12, -127
; CHECK-NEXT: stb r12, 0(r3)
; CHECK-NEXT: li r2, 1
; CHECK-NEXT: stb r11, 0(r3)
; CHECK-NEXT: stb r12, 0(r3)
; CHECK-NEXT: stw r2, 0(r3)
; CHECK-NEXT: mfvsrd r5, v2
; CHECK-NEXT: vaddudm v3, v2, v2
; CHECK-NEXT: pstxv v2, 64(r1), 0
; CHECK-NEXT: neg r5, r5
; CHECK-NEXT: mfvsrd r10, v3
; CHECK-NEXT: std r5, 0(r3)
; CHECK-NEXT: lbz r5, 2(r7)
; CHECK-NEXT: mr r7, r9
; CHECK-NEXT: neg r10, r10
; CHECK-NEXT: std r2, 0(r3)
; CHECK-NEXT: std r0, 0(r3)
; CHECK-NEXT: std r10, 0(r3)
; CHECK-NEXT: rlwinm r5, r5, 0, 27, 27
; CHECK-NEXT: stb r5, 0(0)
; CHECK-NEXT: lbz r5, 2(r8)
; CHECK-NEXT: rlwinm r5, r5, 0, 27, 27
; CHECK-NEXT: stb r5, 0(r3)
; CHECK-NEXT: li r5, 2
; CHECK-NEXT: stw r5, 0(r3)
; CHECK-NEXT: mr r5, r4
; CHECK-NEXT: bl foo@notoc
; CHECK-NEXT: extsw r3, r3
; CHECK-NEXT: addi r1, r1, 80
; CHECK-NEXT: ld r0, 16(r1)
; CHECK-NEXT: mtlr r0
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: test_FI_elim:
; CHECK-BE: # %bb.0: # %bb
; CHECK-BE-NEXT: mflr r0
; CHECK-BE-NEXT: std r0, 16(r1)
; CHECK-BE-NEXT: stdu r1, -176(r1)
; CHECK-BE-NEXT: .cfi_def_cfa_offset 176
; CHECK-BE-NEXT: .cfi_offset lr, 16
; CHECK-BE-NEXT: .cfi_offset r30, -16
; CHECK-BE-NEXT: lxv v2, 0(r3)
; CHECK-BE-NEXT: mr r9, r6
; CHECK-BE-NEXT: mr r6, r5
; CHECK-BE-NEXT: li r0, 4
; CHECK-BE-NEXT: li r11, 3
; CHECK-BE-NEXT: std r30, 160(r1) # 8-byte Folded Spill
; CHECK-BE-NEXT: std r0, 0(r3)
; CHECK-BE-NEXT: stb r11, 0(0)
; CHECK-BE-NEXT: li r12, -127
; CHECK-BE-NEXT: stb r12, 0(r3)
; CHECK-BE-NEXT: li r30, 1
; CHECK-BE-NEXT: stb r11, 0(r3)
; CHECK-BE-NEXT: stb r12, 0(r3)
; CHECK-BE-NEXT: mfvsrld r5, v2
; CHECK-BE-NEXT: vaddudm v3, v2, v2
; CHECK-BE-NEXT: stw r30, 0(r3)
; CHECK-BE-NEXT: pstxv v2, 144(r1), 0
; CHECK-BE-NEXT: mfvsrld r10, v3
; CHECK-BE-NEXT: neg r5, r5
; CHECK-BE-NEXT: std r5, 0(r3)
; CHECK-BE-NEXT: lbz r5, 2(r7)
; CHECK-BE-NEXT: mr r7, r9
; CHECK-BE-NEXT: neg r10, r10
; CHECK-BE-NEXT: std r30, 0(r3)
; CHECK-BE-NEXT: std r0, 0(r3)
; CHECK-BE-NEXT: std r10, 0(r3)
; CHECK-BE-NEXT: rlwinm r5, r5, 0, 27, 27
; CHECK-BE-NEXT: stb r5, 0(0)
; CHECK-BE-NEXT: lbz r5, 2(r8)
; CHECK-BE-NEXT: rlwinm r5, r5, 0, 27, 27
; CHECK-BE-NEXT: stb r5, 0(r3)
; CHECK-BE-NEXT: li r5, 2
; CHECK-BE-NEXT: stw r5, 0(r3)
; CHECK-BE-NEXT: mr r5, r4
; CHECK-BE-NEXT: bl foo
; CHECK-BE-NEXT: nop
; CHECK-BE-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
; CHECK-BE-NEXT: extsw r3, r3
; CHECK-BE-NEXT: addi r1, r1, 176
; CHECK-BE-NEXT: ld r0, 16(r1)
; CHECK-BE-NEXT: mtlr r0
; CHECK-BE-NEXT: blr
bb:
%i = alloca %102, align 8
%i8 = load <2 x i64>, <2 x i64>* undef, align 8
%i9 = extractelement <2 x i64> %i8, i32 1
%i10 = sub i64 0, %i9
%i11 = load <2 x i64>, <2 x i64>* undef, align 8
%i12 = load <2 x i64>, <2 x i64>* undef, align 8
%i13 = add nsw <2 x i64> %i11, %i12
%i14 = extractelement <2 x i64> %i13, i32 1
%i15 = sub i64 0, %i14
store i8 3, i8* null, align 8
store i8 -127, i8* undef, align 1
store i64 4, i64* undef, align 8
store i32 1, i32* undef, align 4
%i16 = getelementptr inbounds %102, %102* %i, i64 0, i32 8, i64 0
%i17 = bitcast i64* %i16 to <2 x i64>*
store <2 x i64> %i8, <2 x i64>* %i17, align 8
store i64 %i10, i64* undef, align 8
store i8 3, i8* undef, align 8
%i18 = getelementptr inbounds %100, %100* %arg6, i64 0, i32 2
%i19 = load i8, i8* %i18, align 1
%i20 = and i8 %i19, 16
store i8 %i20, i8* null, align 2
store i8 -127, i8* undef, align 1
store i64 1, i64* undef, align 8
%i21 = getelementptr inbounds %101, %101* %arg7, i64 0, i32 2
%i22 = load i8, i8* %i21, align 1
%i23 = and i8 %i22, 16
store i8 %i23, i8* undef, align 2
store i64 4, i64* undef, align 8
store i32 2, i32* undef, align 4
store i64 %i15, i64* undef, align 8
%i24 = bitcast [40 x i8]* %arg to %103*
%i25 = bitcast [0 x %96]* %arg2 to [0 x %104]*
%i26 = bitcast [0 x %97]* %arg3 to [0 x %105]*
%i27 = bitcast [0 x %98]* %arg4 to [0 x %106]*
%i28 = call i32 @foo(%103* nonnull %i24, i32* nonnull undef, [0 x %104]* %i25, [0 x %105]* %i26, [0 x %106]* %i27)
ret i32 %i28
}
declare dso_local i32 @foo(%103*, i32*, [0 x %104]*, [0 x %105]*, [0 x %106]*) local_unnamed_addr #1
|