diff options
| author | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-10-16 05:39:30 +0000 |
|---|---|---|
| committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-10-16 05:39:30 +0000 |
| commit | 01805b674728fcfeb2c29e1aa15966e22acc1605 (patch) | |
| tree | be96150ff03d5649dcef80c4421e92c8296196fe /llvm | |
| parent | 6621cf67cf2047f5246732880d583854b212224c (diff) | |
| download | bcm5719-llvm-01805b674728fcfeb2c29e1aa15966e22acc1605.tar.gz bcm5719-llvm-01805b674728fcfeb2c29e1aa15966e22acc1605.zip | |
[aarch64][globalisel] Fix a crash in selectAddrModeIndexed() caused by incorrect G_FRAME_INDEX handling
The wrong operand was being rendered to the result instruction.
The crash was detected by Bitcode/simd_ops/AArch64_halide_runtime.bc
llvm-svn: 315890
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp index 622bf995147..9fb005bb50b 100644 --- a/llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp +++ b/llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp @@ -1497,7 +1497,11 @@ AArch64InstructionSelector::selectAddrModeIndexed(MachineOperand &Root, unsigned Scale = Log2_32(Size); if ((RHSC & (Size - 1)) == 0 && RHSC >= 0 && RHSC < (0x1000 << Scale)) { if (LHSDef->getOpcode() == TargetOpcode::G_FRAME_INDEX) - LHSDef = MRI.getVRegDef(LHSDef->getOperand(1).getReg()); + return {{ + [=](MachineInstrBuilder &MIB) { MIB.add(LHSDef->getOperand(1)); }, + [=](MachineInstrBuilder &MIB) { MIB.addImm(RHSC >> Scale); }, + }}; + return {{ [=](MachineInstrBuilder &MIB) { MIB.add(LHS); }, [=](MachineInstrBuilder &MIB) { MIB.addImm(RHSC >> Scale); }, |

