diff --git a/llvm/test/CodeGen/PowerPC/const-nonsplat-array-init.ll b/llvm/test/CodeGen/PowerPC/const-nonsplat-array-init.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/const-nonsplat-array-init.ll @@ -0,0 +1,1747 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -verify-machineinstrs -mcpu=pwr8 \ +; RUN: -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix=P8-BE +; RUN: llc -verify-machineinstrs -mcpu=pwr9 \ +; RUN: -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix=P9-BE +; RUN: llc -verify-machineinstrs -mcpu=pwr10 \ +; RUN: -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix=P10-BE +; RUN: llc -verify-machineinstrs -mcpu=pwr8 \ +; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s --check-prefix=P8-LE +; RUN: llc -verify-machineinstrs -mcpu=pwr9 \ +; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s --check-prefix=P9-LE +; RUN: llc -verify-machineinstrs -mcpu=pwr10 \ +; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s --check-prefix=P10-LE + +define dso_local void @foo1_int_be_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo1_int_be_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C0(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: li 4, 2057 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: sth 4, 20(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo1_int_be_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C0(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: li 4, 2057 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: sth 4, 20(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo1_int_be_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C0(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 67438087 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: li 4, 2057 +; P10-BE-NEXT: sth 4, 20(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo1_int_be_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI0_0@toc@ha +; P8-LE-NEXT: li 5, 2312 +; P8-LE-NEXT: addi 4, 4, .LCPI0_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 1798 +; P8-LE-NEXT: ori 4, 4, 1284 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: sth 5, 20(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo1_int_be_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI0_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI0_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1798 +; P9-LE-NEXT: ori 4, 4, 1284 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: li 4, 2312 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: sth 4, 20(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo1_int_be_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI0_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 117835012 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: li 4, 2312 +; P10-LE-NEXT: sth 4, 20(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <16 x i8> , ptr %a, align 1 + %arrayidx16 = getelementptr inbounds i8, ptr %a, i64 16 + store i8 4, ptr %arrayidx16, align 1 + %arrayidx17 = getelementptr inbounds i8, ptr %a, i64 17 + store i8 5, ptr %arrayidx17, align 1 + %arrayidx18 = getelementptr inbounds i8, ptr %a, i64 18 + store i8 6, ptr %arrayidx18, align 1 + %arrayidx19 = getelementptr inbounds i8, ptr %a, i64 19 + store i8 7, ptr %arrayidx19, align 1 + %arrayidx20 = getelementptr inbounds i8, ptr %a, i64 20 + store i8 8, ptr %arrayidx20, align 1 + %arrayidx21 = getelementptr inbounds i8, ptr %a, i64 21 + store i8 9, ptr %arrayidx21, align 1 + ret void +} + +define dso_local void @foo2_int_le_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo2_int_le_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C1(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 2057 +; P8-BE-NEXT: ori 4, 4, 2571 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: li 4, 3085 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: sth 4, 20(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo2_int_le_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C1(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: li 4, 3085 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: sth 4, 20(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo2_int_le_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C1(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: li 4, 3085 +; P10-BE-NEXT: sth 4, 20(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo2_int_le_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI1_0@toc@ha +; P8-LE-NEXT: li 5, 3340 +; P8-LE-NEXT: addi 4, 4, .LCPI1_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 2826 +; P8-LE-NEXT: ori 4, 4, 2312 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: sth 5, 20(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo2_int_le_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI1_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI1_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 2826 +; P9-LE-NEXT: ori 4, 4, 2312 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: li 4, 3340 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: sth 4, 20(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo2_int_le_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI1_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 185207048 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: li 4, 3340 +; P10-LE-NEXT: sth 4, 20(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <16 x i8> , ptr %a, align 1 + %arrayidx16 = getelementptr inbounds i8, ptr %a, i64 16 + store i8 8, ptr %arrayidx16, align 1 + %arrayidx17 = getelementptr inbounds i8, ptr %a, i64 17 + store i8 9, ptr %arrayidx17, align 1 + %arrayidx18 = getelementptr inbounds i8, ptr %a, i64 18 + store i8 10, ptr %arrayidx18, align 1 + %arrayidx19 = getelementptr inbounds i8, ptr %a, i64 19 + store i8 11, ptr %arrayidx19, align 1 + %arrayidx20 = getelementptr inbounds i8, ptr %a, i64 20 + store i8 12, ptr %arrayidx20, align 1 + %arrayidx21 = getelementptr inbounds i8, ptr %a, i64 21 + store i8 13, ptr %arrayidx21, align 1 + ret void +} + +define dso_local void @foo3_int_be_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo3_int_be_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C2(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: li 4, 2057 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: sth 4, 20(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo3_int_be_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C2(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: li 4, 2057 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: sth 4, 20(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo3_int_be_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C2(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 67438087 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: li 4, 2057 +; P10-BE-NEXT: sth 4, 20(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo3_int_be_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI2_0@toc@ha +; P8-LE-NEXT: li 5, 2057 +; P8-LE-NEXT: addi 4, 4, .LCPI2_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 1543 +; P8-LE-NEXT: ori 4, 4, 1029 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: sth 5, 20(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo3_int_be_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI2_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI2_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1543 +; P9-LE-NEXT: ori 4, 4, 1029 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: li 4, 2057 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: sth 4, 20(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo3_int_be_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI2_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 101123077 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: li 4, 2057 +; P10-LE-NEXT: sth 4, 20(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <8 x i16> , ptr %a, align 2 + %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8 + store i16 1029, ptr %arrayidx8, align 2 + %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9 + store i16 1543, ptr %arrayidx9, align 2 + %arrayidx10 = getelementptr inbounds i16, ptr %a, i64 10 + store i16 2057, ptr %arrayidx10, align 2 + ret void +} + +define dso_local void @foo4_int_le_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo4_int_le_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C3(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 2057 +; P8-BE-NEXT: ori 4, 4, 2571 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: li 4, 3085 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: sth 4, 20(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo4_int_le_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C3(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: li 4, 3085 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: sth 4, 20(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo4_int_le_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C3(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: li 4, 3085 +; P10-BE-NEXT: sth 4, 20(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo4_int_le_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI3_0@toc@ha +; P8-LE-NEXT: li 5, 3085 +; P8-LE-NEXT: addi 4, 4, .LCPI3_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 2571 +; P8-LE-NEXT: ori 4, 4, 2057 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: sth 5, 20(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo4_int_le_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI3_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI3_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 2571 +; P9-LE-NEXT: ori 4, 4, 2057 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: li 4, 3085 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: sth 4, 20(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo4_int_le_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI3_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 168495113 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: li 4, 3085 +; P10-LE-NEXT: sth 4, 20(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <8 x i16> , ptr %a, align 2 + %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8 + store i16 2057, ptr %arrayidx8, align 2 + %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9 + store i16 2571, ptr %arrayidx9, align 2 + %arrayidx10 = getelementptr inbounds i16, ptr %a, i64 10 + store i16 3085, ptr %arrayidx10, align 2 + ret void +} + +define dso_local void @foo5_int_be_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo5_int_be_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C4(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo5_int_be_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C4(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo5_int_be_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C4(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 67438087 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo5_int_be_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI4_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI4_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 1029 +; P8-LE-NEXT: ori 4, 4, 1543 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo5_int_be_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI4_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI4_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1029 +; P9-LE-NEXT: ori 4, 4, 1543 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo5_int_be_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI4_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 67438087 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x i32> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4 + store i32 67438087, ptr %arrayidx4, align 4 + ret void +} + +define dso_local void @foo6_int_le_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo6_int_le_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C5(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 2057 +; P8-BE-NEXT: ori 4, 4, 2571 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo6_int_le_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C5(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo6_int_le_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C5(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo6_int_le_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI5_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI5_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 2057 +; P8-LE-NEXT: ori 4, 4, 2571 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo6_int_le_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI5_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI5_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 2057 +; P9-LE-NEXT: ori 4, 4, 2571 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo6_int_le_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI5_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 134810123 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x i32> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4 + store i32 134810123, ptr %arrayidx4, align 4 + ret void +} + +define dso_local void @foo7_int_be_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo7_int_be_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C6(2) # %const.0 +; P8-BE-NEXT: lis 5, 1 +; P8-BE-NEXT: ori 5, 5, 515 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 15 +; P8-BE-NEXT: oris 4, 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo7_int_be_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C6(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1 +; P9-BE-NEXT: ori 4, 4, 515 +; P9-BE-NEXT: rldic 4, 4, 32, 15 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo7_int_be_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C6(2) # %const.0 +; P10-BE-NEXT: pli 5, 67438087 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 66051 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo7_int_be_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI6_0@toc@ha +; P8-LE-NEXT: lis 5, 449 +; P8-LE-NEXT: addi 4, 4, .LCPI6_0@toc@l +; P8-LE-NEXT: ori 5, 5, 33089 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 34, 5 +; P8-LE-NEXT: oris 4, 4, 770 +; P8-LE-NEXT: ori 4, 4, 256 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo7_int_be_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI6_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI6_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 449 +; P9-LE-NEXT: ori 4, 4, 33089 +; P9-LE-NEXT: rldic 4, 4, 34, 5 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 770 +; P9-LE-NEXT: ori 4, 4, 256 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo7_int_be_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI6_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 117835012 +; P10-LE-NEXT: pli 5, 50462976 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <16 x i8> , ptr %a, align 1 + %arrayidx16 = getelementptr inbounds i8, ptr %a, i64 16 + store i8 0, ptr %arrayidx16, align 1 + %arrayidx17 = getelementptr inbounds i8, ptr %a, i64 17 + store i8 1, ptr %arrayidx17, align 1 + %arrayidx18 = getelementptr inbounds i8, ptr %a, i64 18 + store i8 2, ptr %arrayidx18, align 1 + %arrayidx19 = getelementptr inbounds i8, ptr %a, i64 19 + store i8 3, ptr %arrayidx19, align 1 + %arrayidx20 = getelementptr inbounds i8, ptr %a, i64 20 + store i8 4, ptr %arrayidx20, align 1 + %arrayidx21 = getelementptr inbounds i8, ptr %a, i64 21 + store i8 5, ptr %arrayidx21, align 1 + %arrayidx22 = getelementptr inbounds i8, ptr %a, i64 22 + store i8 6, ptr %arrayidx22, align 1 + %arrayidx23 = getelementptr inbounds i8, ptr %a, i64 23 + store i8 7, ptr %arrayidx23, align 1 + ret void +} + +define dso_local void @foo8_int_le_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo8_int_le_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C7(2) # %const.0 +; P8-BE-NEXT: lis 5, 2057 +; P8-BE-NEXT: ori 5, 5, 2571 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 4 +; P8-BE-NEXT: oris 4, 4, 3085 +; P8-BE-NEXT: ori 4, 4, 3599 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo8_int_le_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C7(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: rldic 4, 4, 32, 4 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 3085 +; P9-BE-NEXT: ori 4, 4, 3599 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo8_int_le_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C7(2) # %const.0 +; P10-BE-NEXT: pli 5, 202182159 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo8_int_le_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI7_0@toc@ha +; P8-LE-NEXT: lis 5, 963 +; P8-LE-NEXT: addi 4, 4, .LCPI7_0@toc@l +; P8-LE-NEXT: ori 5, 5, 33603 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 34, 4 +; P8-LE-NEXT: oris 4, 4, 2826 +; P8-LE-NEXT: ori 4, 4, 2312 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo8_int_le_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI7_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI7_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 963 +; P9-LE-NEXT: ori 4, 4, 33603 +; P9-LE-NEXT: rldic 4, 4, 34, 4 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 2826 +; P9-LE-NEXT: ori 4, 4, 2312 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo8_int_le_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI7_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 252579084 +; P10-LE-NEXT: pli 5, 185207048 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <16 x i8> , ptr %a, align 1 + %arrayidx16 = getelementptr inbounds i8, ptr %a, i64 16 + store i8 8, ptr %arrayidx16, align 1 + %arrayidx17 = getelementptr inbounds i8, ptr %a, i64 17 + store i8 9, ptr %arrayidx17, align 1 + %arrayidx18 = getelementptr inbounds i8, ptr %a, i64 18 + store i8 10, ptr %arrayidx18, align 1 + %arrayidx19 = getelementptr inbounds i8, ptr %a, i64 19 + store i8 11, ptr %arrayidx19, align 1 + %arrayidx20 = getelementptr inbounds i8, ptr %a, i64 20 + store i8 12, ptr %arrayidx20, align 1 + %arrayidx21 = getelementptr inbounds i8, ptr %a, i64 21 + store i8 13, ptr %arrayidx21, align 1 + %arrayidx22 = getelementptr inbounds i8, ptr %a, i64 22 + store i8 14, ptr %arrayidx22, align 1 + %arrayidx23 = getelementptr inbounds i8, ptr %a, i64 23 + store i8 15, ptr %arrayidx23, align 1 + ret void +} + +define dso_local void @foo9_int_be_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo9_int_be_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C8(2) # %const.0 +; P8-BE-NEXT: lis 5, 1 +; P8-BE-NEXT: ori 5, 5, 515 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 15 +; P8-BE-NEXT: oris 4, 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo9_int_be_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C8(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1 +; P9-BE-NEXT: ori 4, 4, 515 +; P9-BE-NEXT: rldic 4, 4, 32, 15 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo9_int_be_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C8(2) # %const.0 +; P10-BE-NEXT: pli 5, 67438087 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 66051 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo9_int_be_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI8_0@toc@ha +; P8-LE-NEXT: lis 5, 1543 +; P8-LE-NEXT: addi 4, 4, .LCPI8_0@toc@l +; P8-LE-NEXT: ori 5, 5, 1029 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 32, 5 +; P8-LE-NEXT: oris 4, 4, 515 +; P8-LE-NEXT: ori 4, 4, 1 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo9_int_be_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI8_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI8_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1543 +; P9-LE-NEXT: ori 4, 4, 1029 +; P9-LE-NEXT: rldic 4, 4, 32, 5 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 515 +; P9-LE-NEXT: ori 4, 4, 1 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo9_int_be_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI8_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 101123077 +; P10-LE-NEXT: pli 5, 33751041 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <8 x i16> , ptr %a, align 2 + %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8 + store i16 1, ptr %arrayidx8, align 2 + %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9 + store i16 515, ptr %arrayidx9, align 2 + %arrayidx10 = getelementptr inbounds i16, ptr %a, i64 10 + store i16 1029, ptr %arrayidx10, align 2 + %arrayidx11 = getelementptr inbounds i16, ptr %a, i64 11 + store i16 1543, ptr %arrayidx11, align 2 + ret void +} + +define dso_local void @foo10_int_le_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo10_int_le_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C9(2) # %const.0 +; P8-BE-NEXT: lis 5, 2057 +; P8-BE-NEXT: ori 5, 5, 2571 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 4 +; P8-BE-NEXT: oris 4, 4, 3085 +; P8-BE-NEXT: ori 4, 4, 3599 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo10_int_le_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C9(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: rldic 4, 4, 32, 4 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 3085 +; P9-BE-NEXT: ori 4, 4, 3599 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo10_int_le_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C9(2) # %const.0 +; P10-BE-NEXT: pli 5, 202182159 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo10_int_le_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI9_0@toc@ha +; P8-LE-NEXT: lis 5, 3599 +; P8-LE-NEXT: addi 4, 4, .LCPI9_0@toc@l +; P8-LE-NEXT: ori 5, 5, 3085 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 32, 4 +; P8-LE-NEXT: oris 4, 4, 2571 +; P8-LE-NEXT: ori 4, 4, 2057 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo10_int_le_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI9_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI9_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 3599 +; P9-LE-NEXT: ori 4, 4, 3085 +; P9-LE-NEXT: rldic 4, 4, 32, 4 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 2571 +; P9-LE-NEXT: ori 4, 4, 2057 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo10_int_le_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI9_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 235867149 +; P10-LE-NEXT: pli 5, 168495113 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <8 x i16> , ptr %a, align 2 + %arrayidx8 = getelementptr inbounds i16, ptr %a, i64 8 + store i16 2057, ptr %arrayidx8, align 2 + %arrayidx9 = getelementptr inbounds i16, ptr %a, i64 9 + store i16 2571, ptr %arrayidx9, align 2 + %arrayidx10 = getelementptr inbounds i16, ptr %a, i64 10 + store i16 3085, ptr %arrayidx10, align 2 + %arrayidx11 = getelementptr inbounds i16, ptr %a, i64 11 + store i16 3599, ptr %arrayidx11, align 2 + ret void +} + +define dso_local void @foo11_int_be_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo11_int_be_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C10(2) # %const.0 +; P8-BE-NEXT: lis 5, 1 +; P8-BE-NEXT: ori 5, 5, 515 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 15 +; P8-BE-NEXT: oris 4, 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo11_int_be_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C10(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1 +; P9-BE-NEXT: ori 4, 4, 515 +; P9-BE-NEXT: rldic 4, 4, 32, 15 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo11_int_be_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C10(2) # %const.0 +; P10-BE-NEXT: pli 5, 67438087 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 66051 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo11_int_be_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI10_0@toc@ha +; P8-LE-NEXT: lis 5, 1029 +; P8-LE-NEXT: addi 4, 4, .LCPI10_0@toc@l +; P8-LE-NEXT: ori 5, 5, 1543 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 32, 5 +; P8-LE-NEXT: oris 4, 4, 1 +; P8-LE-NEXT: ori 4, 4, 515 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo11_int_be_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI10_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI10_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1029 +; P9-LE-NEXT: ori 4, 4, 1543 +; P9-LE-NEXT: rldic 4, 4, 32, 5 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 1 +; P9-LE-NEXT: ori 4, 4, 515 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo11_int_be_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI10_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 67438087 +; P10-LE-NEXT: pli 5, 66051 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x i32> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4 + store i32 66051, ptr %arrayidx4, align 4 + %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 5 + store i32 67438087, ptr %arrayidx5, align 4 + ret void +} + +define dso_local void @foo12_int_le_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo12_int_le_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C11(2) # %const.0 +; P8-BE-NEXT: lis 5, 2057 +; P8-BE-NEXT: ori 5, 5, 2571 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 4 +; P8-BE-NEXT: oris 4, 4, 3085 +; P8-BE-NEXT: ori 4, 4, 3599 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo12_int_le_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C11(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: rldic 4, 4, 32, 4 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 3085 +; P9-BE-NEXT: ori 4, 4, 3599 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo12_int_le_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C11(2) # %const.0 +; P10-BE-NEXT: pli 5, 202182159 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo12_int_le_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI11_0@toc@ha +; P8-LE-NEXT: lis 5, 3085 +; P8-LE-NEXT: addi 4, 4, .LCPI11_0@toc@l +; P8-LE-NEXT: ori 5, 5, 3599 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 32, 4 +; P8-LE-NEXT: oris 4, 4, 2057 +; P8-LE-NEXT: ori 4, 4, 2571 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo12_int_le_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI11_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI11_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 3085 +; P9-LE-NEXT: ori 4, 4, 3599 +; P9-LE-NEXT: rldic 4, 4, 32, 4 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 2057 +; P9-LE-NEXT: ori 4, 4, 2571 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo12_int_le_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI11_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 202182159 +; P10-LE-NEXT: pli 5, 134810123 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x i32> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4 + store i32 134810123, ptr %arrayidx4, align 4 + %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 5 + store i32 202182159, ptr %arrayidx5, align 4 + ret void +} + +define dso_local void @foo13_int_be_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo13_int_be_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C12(2) # %const.0 +; P8-BE-NEXT: lis 5, 1 +; P8-BE-NEXT: ori 5, 5, 515 +; P8-BE-NEXT: lxvd2x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 15 +; P8-BE-NEXT: oris 4, 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1543 +; P8-BE-NEXT: stxvd2x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo13_int_be_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C12(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1 +; P9-BE-NEXT: ori 4, 4, 515 +; P9-BE-NEXT: rldic 4, 4, 32, 15 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1543 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo13_int_be_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C12(2) # %const.0 +; P10-BE-NEXT: pli 5, 67438087 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 66051 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo13_int_be_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI12_0@toc@ha +; P8-LE-NEXT: lis 5, 1 +; P8-LE-NEXT: addi 4, 4, .LCPI12_0@toc@l +; P8-LE-NEXT: ori 5, 5, 515 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 32, 15 +; P8-LE-NEXT: oris 4, 4, 1029 +; P8-LE-NEXT: ori 4, 4, 1543 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo13_int_be_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI12_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI12_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1 +; P9-LE-NEXT: ori 4, 4, 515 +; P9-LE-NEXT: rldic 4, 4, 32, 15 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 1029 +; P9-LE-NEXT: ori 4, 4, 1543 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo13_int_be_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI12_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 66051 +; P10-LE-NEXT: pli 5, 67438087 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <2 x i64> , ptr %a, align 8 + %arrayidx2 = getelementptr inbounds i64, ptr %a, i64 2 + store i64 283686952306183, ptr %arrayidx2, align 8 + ret void +} + +define dso_local void @foo14_int_le_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo14_int_le_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C13(2) # %const.0 +; P8-BE-NEXT: lis 5, 2057 +; P8-BE-NEXT: ori 5, 5, 2571 +; P8-BE-NEXT: lxvd2x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 4 +; P8-BE-NEXT: oris 4, 4, 3085 +; P8-BE-NEXT: ori 4, 4, 3599 +; P8-BE-NEXT: stxvd2x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo14_int_le_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C13(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 2057 +; P9-BE-NEXT: ori 4, 4, 2571 +; P9-BE-NEXT: rldic 4, 4, 32, 4 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 3085 +; P9-BE-NEXT: ori 4, 4, 3599 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo14_int_le_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C13(2) # %const.0 +; P10-BE-NEXT: pli 5, 202182159 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 134810123 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo14_int_le_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI13_0@toc@ha +; P8-LE-NEXT: lis 5, 2057 +; P8-LE-NEXT: addi 4, 4, .LCPI13_0@toc@l +; P8-LE-NEXT: ori 5, 5, 2571 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 32, 4 +; P8-LE-NEXT: oris 4, 4, 3085 +; P8-LE-NEXT: ori 4, 4, 3599 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo14_int_le_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI13_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI13_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 2057 +; P9-LE-NEXT: ori 4, 4, 2571 +; P9-LE-NEXT: rldic 4, 4, 32, 4 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 3085 +; P9-LE-NEXT: ori 4, 4, 3599 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo14_int_le_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI13_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 134810123 +; P10-LE-NEXT: pli 5, 202182159 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <2 x i64> , ptr %a, align 8 + %arrayidx2 = getelementptr inbounds i64, ptr %a, i64 2 + store i64 579005069656919567, ptr %arrayidx2, align 8 + ret void +} + +define dso_local void @foo15_int_noreuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo15_int_noreuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C14(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1544 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo15_int_noreuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C14(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1544 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo15_int_noreuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C14(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 67438088 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo15_int_noreuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI14_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI14_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 1029 +; P8-LE-NEXT: ori 4, 4, 1544 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo15_int_noreuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI14_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI14_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 1029 +; P9-LE-NEXT: ori 4, 4, 1544 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo15_int_noreuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI14_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 67438088 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x i32> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4 + store i32 67438088, ptr %arrayidx4, align 4 + ret void +} + +define dso_local void @foo16_int_noreuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo16_int_noreuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C15(2) # %const.0 +; P8-BE-NEXT: lis 5, 1 +; P8-BE-NEXT: ori 5, 5, 515 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: rldic 4, 5, 32, 15 +; P8-BE-NEXT: oris 4, 4, 1029 +; P8-BE-NEXT: ori 4, 4, 1544 +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo16_int_noreuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C15(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 1 +; P9-BE-NEXT: ori 4, 4, 515 +; P9-BE-NEXT: rldic 4, 4, 32, 15 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: oris 4, 4, 1029 +; P9-BE-NEXT: ori 4, 4, 1544 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo16_int_noreuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C15(2) # %const.0 +; P10-BE-NEXT: pli 5, 67438088 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 66051 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo16_int_noreuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI15_0@toc@ha +; P8-LE-NEXT: lis 5, 128 +; P8-LE-NEXT: addi 4, 4, .LCPI15_0@toc@l +; P8-LE-NEXT: ori 5, 5, 41153 +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: rldic 4, 5, 35, 5 +; P8-LE-NEXT: oris 4, 4, 1 +; P8-LE-NEXT: ori 4, 4, 515 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo16_int_noreuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI15_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI15_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 128 +; P9-LE-NEXT: ori 4, 4, 41153 +; P9-LE-NEXT: rldic 4, 4, 35, 5 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: oris 4, 4, 1 +; P9-LE-NEXT: ori 4, 4, 515 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo16_int_noreuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI15_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 67438088 +; P10-LE-NEXT: pli 5, 66051 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x i32> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds i32, ptr %a, i64 4 + store i32 66051, ptr %arrayidx4, align 4 + %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 5 + store i32 67438088, ptr %arrayidx5, align 4 + ret void +} + +define dso_local void @foo17_fp_be_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo17_fp_be_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C16(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 16673 +; P8-BE-NEXT: ori 4, 4, 39322 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo17_fp_be_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C16(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 16673 +; P9-BE-NEXT: ori 4, 4, 39322 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo17_fp_be_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C16(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 1092721050 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo17_fp_be_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI16_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI16_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 16673 +; P8-LE-NEXT: ori 4, 4, 39322 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo17_fp_be_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI16_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI16_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 16673 +; P9-LE-NEXT: ori 4, 4, 39322 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo17_fp_be_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI16_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 1092721050 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x float> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds float, ptr %a, i64 4 + store float 0x4024333340000000, ptr %arrayidx4, align 4 + ret void +} + +define dso_local void @foo18_fp_le_reuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo18_fp_le_reuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C17(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 16675 +; P8-BE-NEXT: ori 4, 4, 13107 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo18_fp_le_reuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C17(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 16675 +; P9-BE-NEXT: ori 4, 4, 13107 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo18_fp_le_reuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C17(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 1092825907 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo18_fp_le_reuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI17_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI17_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 16675 +; P8-LE-NEXT: ori 4, 4, 13107 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo18_fp_le_reuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI17_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI17_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 16675 +; P9-LE-NEXT: ori 4, 4, 13107 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo18_fp_le_reuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI17_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 1092825907 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x float> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds float, ptr %a, i64 4 + store float 0x4024666660000000, ptr %arrayidx4, align 4 + ret void +} + +define dso_local void @foo19_fp_be_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo19_fp_be_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C18(2) # %const.0 +; P8-BE-NEXT: lxvd2x 0, 0, 4 +; P8-BE-NEXT: li 4, 4105 +; P8-BE-NEXT: rldic 4, 4, 50, 1 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: stxvd2x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo19_fp_be_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C18(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: li 4, 4105 +; P9-BE-NEXT: rldic 4, 4, 50, 1 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo19_fp_be_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C18(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: li 4, 4105 +; P10-BE-NEXT: rldic 4, 4, 50, 1 +; P10-BE-NEXT: std 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo19_fp_be_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI18_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI18_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: li 4, 4105 +; P8-LE-NEXT: rldic 4, 4, 50, 1 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo19_fp_be_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI18_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI18_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: li 4, 4105 +; P9-LE-NEXT: rldic 4, 4, 50, 1 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo19_fp_be_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI18_0@PCREL(0), 1 +; P10-LE-NEXT: li 4, 4105 +; P10-LE-NEXT: rldic 4, 4, 50, 1 +; P10-LE-NEXT: std 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <2 x double> , ptr %a, align 8 + %arrayidx2 = getelementptr inbounds double, ptr %a, i64 2 + store double 1.000000e+01, ptr %arrayidx2, align 8 + ret void +} + +define dso_local void @foo20_fp_le_reuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo20_fp_le_reuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C19(2) # %const.0 +; P8-BE-NEXT: lis 5, 16420 +; P8-BE-NEXT: lxvd2x 0, 0, 4 +; P8-BE-NEXT: ori 4, 5, 13107 +; P8-BE-NEXT: rldimi 4, 4, 32, 0 +; P8-BE-NEXT: rlwimi 4, 4, 16, 0, 15 +; P8-BE-NEXT: stxvd2x 0, 0, 3 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo20_fp_le_reuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C19(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 16420 +; P9-BE-NEXT: ori 4, 4, 13107 +; P9-BE-NEXT: rldimi 4, 4, 32, 0 +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: rlwimi 4, 4, 16, 0, 15 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo20_fp_le_reuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C19(2) # %const.0 +; P10-BE-NEXT: pli 5, 858993459 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 1076114227 +; P10-BE-NEXT: rldimi 5, 4, 32, 0 +; P10-BE-NEXT: std 5, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo20_fp_le_reuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI19_0@toc@ha +; P8-LE-NEXT: lis 5, 16420 +; P8-LE-NEXT: addi 4, 4, .LCPI19_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: ori 4, 5, 13107 +; P8-LE-NEXT: rldimi 4, 4, 32, 0 +; P8-LE-NEXT: rlwimi 4, 4, 16, 0, 15 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo20_fp_le_reuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI19_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI19_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 16420 +; P9-LE-NEXT: ori 4, 4, 13107 +; P9-LE-NEXT: rldimi 4, 4, 32, 0 +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: rlwimi 4, 4, 16, 0, 15 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo20_fp_le_reuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI19_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 1076114227 +; P10-LE-NEXT: pli 5, 858993459 +; P10-LE-NEXT: rldimi 5, 4, 32, 0 +; P10-LE-NEXT: std 5, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <2 x double> , ptr %a, align 8 + %arrayidx2 = getelementptr inbounds double, ptr %a, i64 2 + store double 1.010000e+01, ptr %arrayidx2, align 8 + ret void +} + +define dso_local void @foo21_fp_noreuse4B(ptr nocapture noundef writeonly %a) local_unnamed_addr #0 { +; P8-BE-LABEL: foo21_fp_noreuse4B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C20(2) # %const.0 +; P8-BE-NEXT: lxvw4x 0, 0, 4 +; P8-BE-NEXT: lis 4, 16268 +; P8-BE-NEXT: ori 4, 4, 52430 +; P8-BE-NEXT: stw 4, 16(3) +; P8-BE-NEXT: stxvw4x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo21_fp_noreuse4B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C20(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: lis 4, 16268 +; P9-BE-NEXT: ori 4, 4, 52430 +; P9-BE-NEXT: stw 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo21_fp_noreuse4B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C20(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: pli 4, 1066192078 +; P10-BE-NEXT: stw 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo21_fp_noreuse4B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI20_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI20_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: lis 4, 16268 +; P8-LE-NEXT: ori 4, 4, 52430 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: stw 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo21_fp_noreuse4B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI20_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI20_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: lis 4, 16268 +; P9-LE-NEXT: ori 4, 4, 52430 +; P9-LE-NEXT: stw 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo21_fp_noreuse4B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI20_0@PCREL(0), 1 +; P10-LE-NEXT: pli 4, 1066192078 +; P10-LE-NEXT: stw 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <4 x float> , ptr %a, align 4 + %arrayidx4 = getelementptr inbounds float, ptr %a, i64 4 + store float 0x3FF19999C0000000, ptr %arrayidx4, align 4 + ret void +} + +define dso_local void @foo22_fp_noreuse8B(ptr nocapture noundef writeonly %a) local_unnamed_addr { +; P8-BE-LABEL: foo22_fp_noreuse8B: +; P8-BE: # %bb.0: # %entry +; P8-BE-NEXT: ld 4, L..C21(2) # %const.0 +; P8-BE-NEXT: lxvd2x 0, 0, 4 +; P8-BE-NEXT: li 4, 21503 +; P8-BE-NEXT: rotldi 4, 4, 52 +; P8-BE-NEXT: std 4, 16(3) +; P8-BE-NEXT: stxvd2x 0, 0, 3 +; P8-BE-NEXT: blr +; +; P9-BE-LABEL: foo22_fp_noreuse8B: +; P9-BE: # %bb.0: # %entry +; P9-BE-NEXT: ld 4, L..C21(2) # %const.0 +; P9-BE-NEXT: lxv 0, 0(4) +; P9-BE-NEXT: li 4, 21503 +; P9-BE-NEXT: rotldi 4, 4, 52 +; P9-BE-NEXT: std 4, 16(3) +; P9-BE-NEXT: stxv 0, 0(3) +; P9-BE-NEXT: blr +; +; P10-BE-LABEL: foo22_fp_noreuse8B: +; P10-BE: # %bb.0: # %entry +; P10-BE-NEXT: ld 4, L..C21(2) # %const.0 +; P10-BE-NEXT: lxv 0, 0(4) +; P10-BE-NEXT: li 4, 21503 +; P10-BE-NEXT: rotldi 4, 4, 52 +; P10-BE-NEXT: std 4, 16(3) +; P10-BE-NEXT: stxv 0, 0(3) +; P10-BE-NEXT: blr +; +; P8-LE-LABEL: foo22_fp_noreuse8B: +; P8-LE: # %bb.0: # %entry +; P8-LE-NEXT: addis 4, 2, .LCPI21_0@toc@ha +; P8-LE-NEXT: addi 4, 4, .LCPI21_0@toc@l +; P8-LE-NEXT: lxvd2x 0, 0, 4 +; P8-LE-NEXT: li 4, 21503 +; P8-LE-NEXT: rotldi 4, 4, 52 +; P8-LE-NEXT: stxvd2x 0, 0, 3 +; P8-LE-NEXT: std 4, 16(3) +; P8-LE-NEXT: blr +; +; P9-LE-LABEL: foo22_fp_noreuse8B: +; P9-LE: # %bb.0: # %entry +; P9-LE-NEXT: addis 4, 2, .LCPI21_0@toc@ha +; P9-LE-NEXT: addi 4, 4, .LCPI21_0@toc@l +; P9-LE-NEXT: lxv 0, 0(4) +; P9-LE-NEXT: li 4, 21503 +; P9-LE-NEXT: rotldi 4, 4, 52 +; P9-LE-NEXT: std 4, 16(3) +; P9-LE-NEXT: stxv 0, 0(3) +; P9-LE-NEXT: blr +; +; P10-LE-LABEL: foo22_fp_noreuse8B: +; P10-LE: # %bb.0: # %entry +; P10-LE-NEXT: plxv 0, .LCPI21_0@PCREL(0), 1 +; P10-LE-NEXT: li 4, 21503 +; P10-LE-NEXT: rotldi 4, 4, 52 +; P10-LE-NEXT: std 4, 16(3) +; P10-LE-NEXT: stxv 0, 0(3) +; P10-LE-NEXT: blr +entry: + store <2 x double> , ptr %a, align 8 + %arrayidx2 = getelementptr inbounds double, ptr %a, i64 2 + store double 0x3FF0000000000005, ptr %arrayidx2, align 8 + ret void +}