mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
[AArch64] Fix bad register class constraint in fast-isel for TST instruction.
rdar://problem/20748715 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236273 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d47066e86b
commit
3a0fccf6a0
@ -2679,8 +2679,11 @@ bool AArch64FastISel::selectSelect(const Instruction *I) {
|
||||
return false;
|
||||
bool CondIsKill = hasTrivialKill(Cond);
|
||||
|
||||
const MCInstrDesc &II = TII.get(AArch64::ANDSWri);
|
||||
CondReg = constrainOperandRegClass(II, CondReg, 1);
|
||||
|
||||
// Emit a TST instruction (ANDS wzr, reg, #imm).
|
||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::ANDSWri),
|
||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, II,
|
||||
AArch64::WZR)
|
||||
.addReg(CondReg, getKillRegState(CondIsKill))
|
||||
.addImm(AArch64_AM::encodeLogicalImmediate(1, 32));
|
||||
|
@ -91,3 +91,13 @@ define void @t6() nounwind {
|
||||
}
|
||||
|
||||
declare void @llvm.trap() nounwind
|
||||
|
||||
define void @ands(i32* %addr) {
|
||||
; CHECK-LABEL: ands:
|
||||
; CHECK: tst [[COND:w[0-9]+]], #0x1
|
||||
; CHECK-NEXT: csel [[COND]],
|
||||
entry:
|
||||
%cond91 = select i1 undef, i32 1, i32 2
|
||||
store i32 %cond91, i32* %addr, align 4
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user