Skip to content

Commit 81db017

Browse files
committed
[M68k] Fix CLR pattern matching for abs.L addressing mode
1 parent 699f483 commit 81db017

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

llvm/lib/Target/M68k/M68kInstrArithmetic.td

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,7 +1136,7 @@ class MxClr_D<MxType TYPE>
11361136

11371137
// CLR reads memory before clearing on M68000 and M68008
11381138
// TODO: mayLoad is *only* applicable on M68000 and M68008
1139-
let mayLoad = 1, mayStore = 1 in
1139+
let mayLoad = 1, mayStore = 1 in {
11401140
class MxClr_M<MxType TYPE, MxOpBundle DST, MxEncMemOp DST_ENC>
11411141
: MxInst<(outs), (ins DST.Op:$dst),
11421142
"clr."#TYPE.Prefix#"\t$dst",
@@ -1147,19 +1147,32 @@ class MxClr_M<MxType TYPE, MxOpBundle DST, MxEncMemOp DST_ENC>
11471147
DST_ENC.EA), DST_ENC.Supplement
11481148
);
11491149
}
1150+
1151+
class MxClr_B<MxType TYPE>
1152+
: MxInst<(outs), (ins MxAL32:$dst),
1153+
"clr."#TYPE.Prefix#"\t$dst",
1154+
[(store (TYPE.VT 0), (i32 (MxWrapper tglobaladdr:$dst)))]> {
1155+
defvar AbsEncoding = MxEncAddrMode_abs<"dst", true>;
1156+
let Inst = (ascend
1157+
(descend 0b01000010,
1158+
/*SIZE*/!cast<MxEncSize>("MxEncSize"#TYPE.Size).Value,
1159+
AbsEncoding.EA), AbsEncoding.Supplement
1160+
);
1161+
}
1162+
} // let mayLoad = 1, mayStore = 1
11501163
} // let Defs = [CCR]
11511164

11521165
foreach S = [8, 16, 32] in {
11531166
defvar DTYPE = !cast<MxType>("MxType"#S#"d");
11541167
def CLR#S#d : MxClr_D<DTYPE>;
1168+
def CLR#S#b : MxClr_B<DTYPE>;
11551169

11561170
defvar MTYPE = !cast<MxType>("MxType"#S);
11571171
def CLR#S#j : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_j"), MxEncAddrMode_j<"dst">>;
11581172
def CLR#S#o : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_o"), MxEncAddrMode_o<"dst">>;
11591173
def CLR#S#e : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_e"), MxEncAddrMode_e<"dst">>;
11601174
def CLR#S#p : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_p"), MxEncAddrMode_p<"dst">>;
11611175
def CLR#S#f : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_f"), MxEncAddrMode_f<"dst">>;
1162-
def CLR#S#b : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_b"), MxEncAddrMode_abs<"dst", true>>;
11631176
def CLR#S#q : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_q"), MxEncAddrMode_q<"dst">>;
11641177
def CLR#S#k : MxClr_M<MTYPE, !cast<MxOpBundle>("MxOp"#S#"AddrMode_k"), MxEncAddrMode_k<"dst">>;
11651178
}

0 commit comments

Comments
 (0)