mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-28 09:31:03 +00:00
ARM: make sure ARM-mode pseudo-inst requires IsARM
I'd forgotten that "Requires" blocks override rather than add to the constraints, so my pseudo-instruction was being selected in Thumb mode leading to nonsense instructions. rdar://problem/14817358 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189096 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c73488a38e
commit
287c84a0b4
@ -4197,7 +4197,7 @@ def MOVCCi32imm
|
|||||||
8, IIC_iCMOVix2,
|
8, IIC_iCMOVix2,
|
||||||
[(set GPR:$Rd, (ARMcmov GPR:$false, imm:$src,
|
[(set GPR:$Rd, (ARMcmov GPR:$false, imm:$src,
|
||||||
cmovpred:$p))]>,
|
cmovpred:$p))]>,
|
||||||
RegConstraint<"$false = $Rd">, Requires<[HasV6T2]>;
|
RegConstraint<"$false = $Rd">, Requires<[IsARM, HasV6T2]>;
|
||||||
|
|
||||||
let isMoveImm = 1 in
|
let isMoveImm = 1 in
|
||||||
def MVNCCi : ARMPseudoInst<(outs GPR:$Rd),
|
def MVNCCi : ARMPseudoInst<(outs GPR:$Rd),
|
||||||
|
@ -99,8 +99,17 @@ entry:
|
|||||||
|
|
||||||
define i32 @f10(i32 %a, i32 %b) {
|
define i32 @f10(i32 %a, i32 %b) {
|
||||||
; CHECK-LABEL: f10:
|
; CHECK-LABEL: f10:
|
||||||
; CHECK: movwne r2, #1234 @ encoding: [0x40,0xf2,0xd2,0x42]
|
; CHECK: movwne {{r[0-9]+}}, #1234 @ encoding: [0x40,0xf2,0xd2,0x4{{[0-9a-f]+}}]
|
||||||
%tst = icmp ne i32 %a, %b
|
%tst = icmp ne i32 %a, %b
|
||||||
%val = select i1 %tst, i32 1234, i32 12345
|
%val = select i1 %tst, i32 1234, i32 12345
|
||||||
ret i32 %val
|
ret i32 %val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; Make sure we pick the Thumb encoding for movw/movt
|
||||||
|
define i32 @f11(i32 %a, i32 %b) {
|
||||||
|
; CHECK-LABEL: f11:
|
||||||
|
; CHECK: movwne {{r[0-9]+}}, #50033 @ encoding: [0x4c,0xf2,0x71,0x3{{[0-9a-f]+}}]
|
||||||
|
%tst = icmp ne i32 %a, %b
|
||||||
|
%val = select i1 %tst, i32 123454321, i32 543212345
|
||||||
|
ret i32 %val
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user