1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 02:33:06 +01:00

[VE] LVLGen sets VL before vector insts

The VE backend represents vector instructions with an explicit 'i32'
vector length operand.  In the VE ISA, the vector length is always read
from the VL hardware register.  The LVLGen pass inserts 'lvl'
instructions as necessary to set VL to the right value before each
vector instruction.

Reviewed By: kaz7

Differential Revision: https://reviews.llvm.org/D91416
This commit is contained in:
Simon Moll 2020-11-16 09:19:14 +01:00
parent 55b8c19420
commit 4b7f9fd6c6
7 changed files with 366 additions and 0 deletions

View File

@ -14,6 +14,7 @@ tablegen(LLVM VEGenCallingConv.inc -gen-callingconv)
add_public_tablegen_target(VECommonTableGen)
add_llvm_target(VECodeGen
LVLGen.cpp
VEAsmPrinter.cpp
VEFrameLowering.cpp
VEISelDAGToDAG.cpp

132
lib/Target/VE/LVLGen.cpp Normal file
View File

@ -0,0 +1,132 @@
//===-- LVLGen.cpp - LVL instruction generator ----------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "VE.h"
#include "VESubtarget.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/Target/TargetMachine.h"
using namespace llvm;
#define DEBUG_TYPE "lvl-gen"
namespace {
struct LVLGen : public MachineFunctionPass {
const TargetInstrInfo *TII;
const TargetRegisterInfo *TRI;
static char ID;
LVLGen() : MachineFunctionPass(ID) {}
bool runOnMachineBasicBlock(MachineBasicBlock &MBB);
bool runOnMachineFunction(MachineFunction &F) override;
unsigned getVL(const MachineInstr &MI);
int getVLIndex(unsigned Opcode);
};
char LVLGen::ID = 0;
} // end of anonymous namespace
FunctionPass *llvm::createLVLGenPass() { return new LVLGen; }
int LVLGen::getVLIndex(unsigned Opcode) {
const MCInstrDesc &MCID = TII->get(Opcode);
// If an instruction has VLIndex information, return it.
if (HAS_VLINDEX(MCID.TSFlags))
return GET_VLINDEX(MCID.TSFlags);
return -1;
}
// returns a register holding a vector length. NoRegister is returned when
// this MI does not have a vector length.
unsigned LVLGen::getVL(const MachineInstr &MI) {
int Index = getVLIndex(MI.getOpcode());
if (Index >= 0)
return MI.getOperand(Index).getReg();
return VE::NoRegister;
}
bool LVLGen::runOnMachineBasicBlock(MachineBasicBlock &MBB) {
#define RegName(no) \
(MBB.getParent()->getSubtarget<VESubtarget>().getRegisterInfo()->getName(no))
bool Changed = false;
bool HasRegForVL = false;
unsigned RegForVL;
for (MachineBasicBlock::iterator I = MBB.begin(); I != MBB.end();) {
MachineBasicBlock::iterator MI = I;
unsigned Reg = getVL(*MI);
if (Reg != VE::NoRegister) {
LLVM_DEBUG(dbgs() << "Vector instruction found: ");
LLVM_DEBUG(MI->dump());
LLVM_DEBUG(dbgs() << "Vector length is " << RegName(Reg) << ". ");
LLVM_DEBUG(dbgs() << "Current VL is "
<< (HasRegForVL ? RegName(RegForVL) : "unknown")
<< ". ");
if (!HasRegForVL || RegForVL != Reg) {
LLVM_DEBUG(dbgs() << "Generate a LVL instruction to load "
<< RegName(Reg) << ".\n");
BuildMI(MBB, I, MI->getDebugLoc(), TII->get(VE::LVLr)).addReg(Reg);
HasRegForVL = true;
RegForVL = Reg;
Changed = true;
} else {
LLVM_DEBUG(dbgs() << "Reuse current VL.\n");
}
} else if (HasRegForVL) {
// Old VL is overwritten, so disable HasRegForVL.
if (MI->findRegisterDefOperandIdx(RegForVL, false, false, TRI) != -1) {
LLVM_DEBUG(dbgs() << RegName(RegForVL) << " is killed: ");
LLVM_DEBUG(MI->dump());
HasRegForVL = false;
}
}
if (HasRegForVL) {
// The latest VL is killed, so disable HasRegForVL.
if (MI->killsRegister(RegForVL, TRI)) {
LLVM_DEBUG(dbgs() << RegName(RegForVL) << " is killed: ");
LLVM_DEBUG(MI->dump());
HasRegForVL = false;
}
}
++I;
}
return Changed;
}
bool LVLGen::runOnMachineFunction(MachineFunction &F) {
LLVM_DEBUG(dbgs() << "********** Begin LVLGen **********\n");
LLVM_DEBUG(dbgs() << "********** Function: " << F.getName() << '\n');
LLVM_DEBUG(F.dump());
bool Changed = false;
const VESubtarget &Subtarget = F.getSubtarget<VESubtarget>();
TII = Subtarget.getInstrInfo();
TRI = Subtarget.getRegisterInfo();
for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI)
Changed |= runOnMachineBasicBlock(*FI);
if (Changed) {
LLVM_DEBUG(dbgs() << "\n");
LLVM_DEBUG(F.dump());
}
LLVM_DEBUG(dbgs() << "********** End LVLGen **********\n");
return Changed;
}

View File

@ -29,6 +29,7 @@ class MachineInstr;
FunctionPass *createVEISelDag(VETargetMachine &TM);
FunctionPass *createVEPromoteToI1Pass();
FunctionPass *createLVLGenPass();
void LowerVEMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
AsmPrinter &AP);

View File

@ -98,6 +98,7 @@ public:
void addIRPasses() override;
bool addInstSelector() override;
void addPreEmitPass() override;
};
} // namespace
@ -115,3 +116,8 @@ bool VEPassConfig::addInstSelector() {
addPass(createVEISelDag(getVETargetMachine()));
return false;
}
void VEPassConfig::addPreEmitPass() {
// LVLGen should be called after scheduling and register allocation
addPass(createLVLGenPass());
}

View File

@ -0,0 +1,66 @@
; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s
; Test for correct placement of 'lvl' instructions
; Function Attrs: nounwind readonly
declare <256 x double> @llvm.ve.vl.vld.vssl(i64, i8*, i32)
declare void @llvm.ve.vl.vst.vssl(<256 x double>, i64, i8*, i32)
; Check that the backend can handle constant VL as well as parametric VL
; sources.
; Function Attrs: nounwind
define void @switching_vl(i32 %evl, i32 %evl2, i8* %P, i8* %Q) {
; CHECK-LABEL: switching_vl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s4, 256
; CHECK-NEXT: lvl %s4
; CHECK-NEXT: vld %v0, 8, %s2
; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
; CHECK-NEXT: lvl %s0
; CHECK-NEXT: vst %v0, 16, %s3
; CHECK-NEXT: lea %s4, 128
; CHECK-NEXT: lvl %s4
; CHECK-NEXT: vld %v0, 16, %s2
; CHECK-NEXT: adds.w.sx %s1, %s1, (0)1
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vst %v0, 16, %s3
; CHECK-NEXT: lvl %s4
; CHECK-NEXT: vld %v0, 8, %s2
; CHECK-NEXT: lvl %s0
; CHECK-NEXT: vst %v0, 16, %s3
; CHECK-NEXT: or %s11, 0, %s9
%l0 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, i8* %P, i32 256)
tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l0, i64 16, i8* %Q, i32 %evl)
%l1 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 16, i8* %P, i32 128)
tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l1, i64 16, i8* %Q, i32 %evl2)
%l2 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, i8* %P, i32 128)
tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l2, i64 16, i8* %Q, i32 %evl)
ret void
}
; Check that no redundant 'lvl' is inserted when vector length does not change
; in a basic block.
; Function Attrs: nounwind
define void @stable_vl(i32 %evl, i8* %P, i8* %Q) {
; CHECK-LABEL: stable_vl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
; CHECK-NEXT: lvl %s0
; CHECK-NEXT: vld %v0, 8, %s1
; CHECK-NEXT: vst %v0, 16, %s2
; CHECK-NEXT: vld %v0, 16, %s1
; CHECK-NEXT: vst %v0, 16, %s2
; CHECK-NEXT: vld %v0, 8, %s1
; CHECK-NEXT: vst %v0, 16, %s2
; CHECK-NEXT: or %s11, 0, %s9
%l0 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, i8* %P, i32 %evl)
tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l0, i64 16, i8* %Q, i32 %evl)
%l1 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 16, i8* %P, i32 %evl)
tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l1, i64 16, i8* %Q, i32 %evl)
%l2 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, i8* %P, i32 %evl)
tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l2, i64 16, i8* %Q, i32 %evl)
ret void
}

View File

@ -10,6 +10,7 @@ define void @vld_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vld_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -28,6 +29,7 @@ define void @vld_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vld_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vld %v0, %s1, %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -48,6 +50,7 @@ define void @vld_vssl_imm(i8* %0) {
; CHECK-LABEL: vld_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -63,6 +66,7 @@ define void @vld_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vld_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, 8, %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: #APP
@ -80,6 +84,7 @@ define void @vldnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -98,6 +103,7 @@ define void @vldnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vld.nc %v0, %s1, %s2
; CHECK-NEXT: vld.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -118,6 +124,7 @@ define void @vldnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -133,6 +140,7 @@ define void @vldnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld.nc %v0, 8, %s1
; CHECK-NEXT: vld.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -150,6 +158,7 @@ define void @vldu_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldu_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -168,6 +177,7 @@ define void @vldu_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldu_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldu %v0, %s1, %s2
; CHECK-NEXT: vldu %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -188,6 +198,7 @@ define void @vldu_vssl_imm(i8* %0) {
; CHECK-LABEL: vldu_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldu %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -203,6 +214,7 @@ define void @vldu_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldu_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu %v0, 8, %s1
; CHECK-NEXT: vldu %v0, 8, %s0
; CHECK-NEXT: #APP
@ -220,6 +232,7 @@ define void @vldunc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldunc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -238,6 +251,7 @@ define void @vldunc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldunc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldu.nc %v0, %s1, %s2
; CHECK-NEXT: vldu.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -258,6 +272,7 @@ define void @vldunc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldunc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldu.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -273,6 +288,7 @@ define void @vldunc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldunc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu.nc %v0, 8, %s1
; CHECK-NEXT: vldu.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -290,6 +306,7 @@ define void @vldlsx_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldlsx_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.sx %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -308,6 +325,7 @@ define void @vldlsx_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldlsx_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl.sx %v0, %s1, %s2
; CHECK-NEXT: vldl.sx %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -328,6 +346,7 @@ define void @vldlsx_vssl_imm(i8* %0) {
; CHECK-LABEL: vldlsx_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl.sx %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -343,6 +362,7 @@ define void @vldlsx_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldlsx_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.sx %v0, 8, %s1
; CHECK-NEXT: vldl.sx %v0, 8, %s0
; CHECK-NEXT: #APP
@ -360,6 +380,7 @@ define void @vldlsxnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldlsxnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.sx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -378,6 +399,7 @@ define void @vldlsxnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldlsxnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl.sx.nc %v0, %s1, %s2
; CHECK-NEXT: vldl.sx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -398,6 +420,7 @@ define void @vldlsxnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldlsxnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl.sx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -413,6 +436,7 @@ define void @vldlsxnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldlsxnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.sx.nc %v0, 8, %s1
; CHECK-NEXT: vldl.sx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -430,6 +454,7 @@ define void @vldlzx_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldlzx_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.zx %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -448,6 +473,7 @@ define void @vldlzx_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldlzx_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl.zx %v0, %s1, %s2
; CHECK-NEXT: vldl.zx %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -468,6 +494,7 @@ define void @vldlzx_vssl_imm(i8* %0) {
; CHECK-LABEL: vldlzx_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl.zx %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -483,6 +510,7 @@ define void @vldlzx_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldlzx_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.zx %v0, 8, %s1
; CHECK-NEXT: vldl.zx %v0, 8, %s0
; CHECK-NEXT: #APP
@ -500,6 +528,7 @@ define void @vldlzxnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldlzxnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.zx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -518,6 +547,7 @@ define void @vldlzxnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldlzxnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl.zx.nc %v0, %s1, %s2
; CHECK-NEXT: vldl.zx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -538,6 +568,7 @@ define void @vldlzxnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldlzxnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl.zx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -553,6 +584,7 @@ define void @vldlzxnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldlzxnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl.zx.nc %v0, 8, %s1
; CHECK-NEXT: vldl.zx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -570,6 +602,7 @@ define void @vld2d_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vld2d_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld2d %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -588,6 +621,7 @@ define void @vld2d_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vld2d_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vld2d %v0, %s1, %s2
; CHECK-NEXT: vld2d %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -608,6 +642,7 @@ define void @vld2d_vssl_imm(i8* %0) {
; CHECK-LABEL: vld2d_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld2d %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -623,6 +658,7 @@ define void @vld2d_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vld2d_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld2d %v0, 8, %s1
; CHECK-NEXT: vld2d %v0, 8, %s0
; CHECK-NEXT: #APP
@ -640,6 +676,7 @@ define void @vld2dnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vld2dnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld2d.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -658,6 +695,7 @@ define void @vld2dnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vld2dnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vld2d.nc %v0, %s1, %s2
; CHECK-NEXT: vld2d.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -678,6 +716,7 @@ define void @vld2dnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vld2dnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld2d.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -693,6 +732,7 @@ define void @vld2dnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vld2dnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld2d.nc %v0, 8, %s1
; CHECK-NEXT: vld2d.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -710,6 +750,7 @@ define void @vldu2d_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldu2d_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu2d %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -728,6 +769,7 @@ define void @vldu2d_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldu2d_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldu2d %v0, %s1, %s2
; CHECK-NEXT: vldu2d %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -748,6 +790,7 @@ define void @vldu2d_vssl_imm(i8* %0) {
; CHECK-LABEL: vldu2d_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldu2d %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -763,6 +806,7 @@ define void @vldu2d_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldu2d_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu2d %v0, 8, %s1
; CHECK-NEXT: vldu2d %v0, 8, %s0
; CHECK-NEXT: #APP
@ -780,6 +824,7 @@ define void @vldu2dnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldu2dnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu2d.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -798,6 +843,7 @@ define void @vldu2dnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldu2dnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldu2d.nc %v0, %s1, %s2
; CHECK-NEXT: vldu2d.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -818,6 +864,7 @@ define void @vldu2dnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldu2dnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldu2d.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -833,6 +880,7 @@ define void @vldu2dnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldu2dnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldu2d.nc %v0, 8, %s1
; CHECK-NEXT: vldu2d.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -850,6 +898,7 @@ define void @vldl2dsx_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldl2dsx_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.sx %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -868,6 +917,7 @@ define void @vldl2dsx_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldl2dsx_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl2d.sx %v0, %s1, %s2
; CHECK-NEXT: vldl2d.sx %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -888,6 +938,7 @@ define void @vldl2dsx_vssl_imm(i8* %0) {
; CHECK-LABEL: vldl2dsx_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl2d.sx %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -903,6 +954,7 @@ define void @vldl2dsx_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldl2dsx_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.sx %v0, 8, %s1
; CHECK-NEXT: vldl2d.sx %v0, 8, %s0
; CHECK-NEXT: #APP
@ -920,6 +972,7 @@ define void @vldl2dsxnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldl2dsxnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.sx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -938,6 +991,7 @@ define void @vldl2dsxnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldl2dsxnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl2d.sx.nc %v0, %s1, %s2
; CHECK-NEXT: vldl2d.sx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -958,6 +1012,7 @@ define void @vldl2dsxnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldl2dsxnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl2d.sx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -973,6 +1028,7 @@ define void @vldl2dsxnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldl2dsxnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.sx.nc %v0, 8, %s1
; CHECK-NEXT: vldl2d.sx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
@ -990,6 +1046,7 @@ define void @vldl2dzx_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldl2dzx_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.zx %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -1008,6 +1065,7 @@ define void @vldl2dzx_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldl2dzx_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl2d.zx %v0, %s1, %s2
; CHECK-NEXT: vldl2d.zx %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -1028,6 +1086,7 @@ define void @vldl2dzx_vssl_imm(i8* %0) {
; CHECK-LABEL: vldl2dzx_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl2d.zx %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -1043,6 +1102,7 @@ define void @vldl2dzx_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldl2dzx_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.zx %v0, 8, %s1
; CHECK-NEXT: vldl2d.zx %v0, 8, %s0
; CHECK-NEXT: #APP
@ -1060,6 +1120,7 @@ define void @vldl2dzxnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vldl2dzxnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.zx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, %s1, %s0
@ -1078,6 +1139,7 @@ define void @vldl2dzxnc_vssvl(i8* %0, i64 %1, i8* %2) {
; CHECK-LABEL: vldl2dzxnc_vssvl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s3, 256
; CHECK-NEXT: lvl %s3
; CHECK-NEXT: vldl2d.zx.nc %v0, %s1, %s2
; CHECK-NEXT: vldl2d.zx.nc %v0, %s1, %s0
; CHECK-NEXT: #APP
@ -1098,6 +1160,7 @@ define void @vldl2dzxnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vldl2dzxnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vldl2d.zx.nc %v0, 8, %s0
; CHECK-NEXT: #APP
; CHECK-NEXT: vst %v0, 8, %s0
@ -1113,6 +1176,7 @@ define void @vldl2dzxnc_vssvl_imm(i8* %0, i8* %1) {
; CHECK-LABEL: vldl2dzxnc_vssvl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vldl2d.zx.nc %v0, 8, %s1
; CHECK-NEXT: vldl2d.zx.nc %v0, 8, %s0
; CHECK-NEXT: #APP

View File

@ -10,6 +10,7 @@ define void @vst_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vst_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -29,6 +30,7 @@ define void @vst_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vst_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -45,6 +47,7 @@ define void @vst_vssl_imm(i8* %0) {
; CHECK-LABEL: vst_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -58,6 +61,7 @@ define void @vst_vssml_imm(i8* %0) {
; CHECK-LABEL: vst_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -71,6 +75,7 @@ define void @vstnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst.nc %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -87,6 +92,7 @@ define void @vstnc_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstnc_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst.nc %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -103,6 +109,7 @@ define void @vstnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vstnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst.nc %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -116,6 +123,7 @@ define void @vstnc_vssml_imm(i8* %0) {
; CHECK-LABEL: vstnc_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst.nc %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -129,6 +137,7 @@ define void @vstot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -145,6 +154,7 @@ define void @vstot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -161,6 +171,7 @@ define void @vstot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -174,6 +185,7 @@ define void @vstot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -187,6 +199,7 @@ define void @vstncot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstncot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst.nc.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -203,6 +216,7 @@ define void @vstncot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstncot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst.nc.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -219,6 +233,7 @@ define void @vstncot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstncot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst.nc.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -232,6 +247,7 @@ define void @vstncot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstncot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst.nc.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -245,6 +261,7 @@ define void @vstu_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstu_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -261,6 +278,7 @@ define void @vstu_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstu_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -277,6 +295,7 @@ define void @vstu_vssl_imm(i8* %0) {
; CHECK-LABEL: vstu_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -290,6 +309,7 @@ define void @vstu_vssml_imm(i8* %0) {
; CHECK-LABEL: vstu_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -303,6 +323,7 @@ define void @vstunc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstunc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu.nc %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -319,6 +340,7 @@ define void @vstunc_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstunc_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu.nc %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -335,6 +357,7 @@ define void @vstunc_vssl_imm(i8* %0) {
; CHECK-LABEL: vstunc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu.nc %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -348,6 +371,7 @@ define void @vstunc_vssml_imm(i8* %0) {
; CHECK-LABEL: vstunc_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu.nc %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -361,6 +385,7 @@ define void @vstuot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstuot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -377,6 +402,7 @@ define void @vstuot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstuot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -393,6 +419,7 @@ define void @vstuot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstuot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -406,6 +433,7 @@ define void @vstuot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstuot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -419,6 +447,7 @@ define void @vstuncot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstuncot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu.nc.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -435,6 +464,7 @@ define void @vstuncot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstuncot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu.nc.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -451,6 +481,7 @@ define void @vstuncot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstuncot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu.nc.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -464,6 +495,7 @@ define void @vstuncot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstuncot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu.nc.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -477,6 +509,7 @@ define void @vstl_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstl_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -493,6 +526,7 @@ define void @vstl_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstl_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -509,6 +543,7 @@ define void @vstl_vssl_imm(i8* %0) {
; CHECK-LABEL: vstl_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -522,6 +557,7 @@ define void @vstl_vssml_imm(i8* %0) {
; CHECK-LABEL: vstl_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -535,6 +571,7 @@ define void @vstlnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstlnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl.nc %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -551,6 +588,7 @@ define void @vstlnc_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstlnc_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl.nc %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -567,6 +605,7 @@ define void @vstlnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vstlnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl.nc %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -580,6 +619,7 @@ define void @vstlnc_vssml_imm(i8* %0) {
; CHECK-LABEL: vstlnc_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl.nc %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -593,6 +633,7 @@ define void @vstlot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstlot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -609,6 +650,7 @@ define void @vstlot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstlot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -625,6 +667,7 @@ define void @vstlot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstlot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -638,6 +681,7 @@ define void @vstlot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstlot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -651,6 +695,7 @@ define void @vstlncot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstlncot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl.nc.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -667,6 +712,7 @@ define void @vstlncot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstlncot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl.nc.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -683,6 +729,7 @@ define void @vstlncot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstlncot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl.nc.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -696,6 +743,7 @@ define void @vstlncot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstlncot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl.nc.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -709,6 +757,7 @@ define void @vst2d_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vst2d_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -725,6 +774,7 @@ define void @vst2d_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vst2d_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -741,6 +791,7 @@ define void @vst2d_vssl_imm(i8* %0) {
; CHECK-LABEL: vst2d_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -754,6 +805,7 @@ define void @vst2d_vssml_imm(i8* %0) {
; CHECK-LABEL: vst2d_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -767,6 +819,7 @@ define void @vst2dnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vst2dnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d.nc %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -783,6 +836,7 @@ define void @vst2dnc_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vst2dnc_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d.nc %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -799,6 +853,7 @@ define void @vst2dnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vst2dnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d.nc %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -812,6 +867,7 @@ define void @vst2dnc_vssml_imm(i8* %0) {
; CHECK-LABEL: vst2dnc_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d.nc %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -825,6 +881,7 @@ define void @vst2dot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vst2dot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -841,6 +898,7 @@ define void @vst2dot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vst2dot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -857,6 +915,7 @@ define void @vst2dot_vssl_imm(i8* %0) {
; CHECK-LABEL: vst2dot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -870,6 +929,7 @@ define void @vst2dot_vssml_imm(i8* %0) {
; CHECK-LABEL: vst2dot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -883,6 +943,7 @@ define void @vst2dncot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vst2dncot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d.nc.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -899,6 +960,7 @@ define void @vst2dncot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vst2dncot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vst2d.nc.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -915,6 +977,7 @@ define void @vst2dncot_vssl_imm(i8* %0) {
; CHECK-LABEL: vst2dncot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d.nc.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -928,6 +991,7 @@ define void @vst2dncot_vssml_imm(i8* %0) {
; CHECK-LABEL: vst2dncot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vst2d.nc.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -941,6 +1005,7 @@ define void @vstu2d_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2d_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -957,6 +1022,7 @@ define void @vstu2d_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2d_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -973,6 +1039,7 @@ define void @vstu2d_vssl_imm(i8* %0) {
; CHECK-LABEL: vstu2d_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -986,6 +1053,7 @@ define void @vstu2d_vssml_imm(i8* %0) {
; CHECK-LABEL: vstu2d_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -999,6 +1067,7 @@ define void @vstu2dnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2dnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d.nc %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1015,6 +1084,7 @@ define void @vstu2dnc_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2dnc_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d.nc %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1031,6 +1101,7 @@ define void @vstu2dnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vstu2dnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d.nc %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1044,6 +1115,7 @@ define void @vstu2dnc_vssml_imm(i8* %0) {
; CHECK-LABEL: vstu2dnc_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d.nc %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1057,6 +1129,7 @@ define void @vstu2dot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2dot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1073,6 +1146,7 @@ define void @vstu2dot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2dot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1089,6 +1163,7 @@ define void @vstu2dot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstu2dot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1102,6 +1177,7 @@ define void @vstu2dot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstu2dot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1115,6 +1191,7 @@ define void @vstu2dncot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2dncot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d.nc.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1131,6 +1208,7 @@ define void @vstu2dncot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstu2dncot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstu2d.nc.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1147,6 +1225,7 @@ define void @vstu2dncot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstu2dncot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d.nc.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1160,6 +1239,7 @@ define void @vstu2dncot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstu2dncot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstu2d.nc.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1173,6 +1253,7 @@ define void @vstl2d_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2d_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1189,6 +1270,7 @@ define void @vstl2d_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2d_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1205,6 +1287,7 @@ define void @vstl2d_vssl_imm(i8* %0) {
; CHECK-LABEL: vstl2d_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1218,6 +1301,7 @@ define void @vstl2d_vssml_imm(i8* %0) {
; CHECK-LABEL: vstl2d_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1231,6 +1315,7 @@ define void @vstl2dnc_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2dnc_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d.nc %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1247,6 +1332,7 @@ define void @vstl2dnc_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2dnc_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d.nc %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1263,6 +1349,7 @@ define void @vstl2dnc_vssl_imm(i8* %0) {
; CHECK-LABEL: vstl2dnc_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d.nc %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1276,6 +1363,7 @@ define void @vstl2dnc_vssml_imm(i8* %0) {
; CHECK-LABEL: vstl2dnc_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d.nc %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1289,6 +1377,7 @@ define void @vstl2dot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2dot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1305,6 +1394,7 @@ define void @vstl2dot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2dot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1321,6 +1411,7 @@ define void @vstl2dot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstl2dot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1334,6 +1425,7 @@ define void @vstl2dot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstl2dot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1347,6 +1439,7 @@ define void @vstl2dncot_vssl(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2dncot_vssl:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d.nc.ot %v0, %s1, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1363,6 +1456,7 @@ define void @vstl2dncot_vssml(i8* %0, i64 %1) {
; CHECK-LABEL: vstl2dncot_vssml:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s2, 256
; CHECK-NEXT: lvl %s2
; CHECK-NEXT: vld %v0, %s1, %s0
; CHECK-NEXT: vstl2d.nc.ot %v0, %s1, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9
@ -1379,6 +1473,7 @@ define void @vstl2dncot_vssl_imm(i8* %0) {
; CHECK-LABEL: vstl2dncot_vssl_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d.nc.ot %v0, 8, %s0
; CHECK-NEXT: or %s11, 0, %s9
@ -1392,6 +1487,7 @@ define void @vstl2dncot_vssml_imm(i8* %0) {
; CHECK-LABEL: vstl2dncot_vssml_imm:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s1, 256
; CHECK-NEXT: lvl %s1
; CHECK-NEXT: vld %v0, 8, %s0
; CHECK-NEXT: vstl2d.nc.ot %v0, 8, %s0, %vm0
; CHECK-NEXT: or %s11, 0, %s9