Skip to content

Commit feb4d98

Browse files
koachanIanWood1
authored andcommitted
[SPARC][IAS][NFC] Tidy up LDSTUB and 64-bit mul/div instruction definitions
Reviewers: brad0, rorth, s-barannikov Reviewed By: s-barannikov Pull Request: llvm#138398
1 parent 163cf55 commit feb4d98

File tree

2 files changed

+19
-43
lines changed

2 files changed

+19
-43
lines changed

llvm/lib/Target/Sparc/SparcInstr64Bit.td

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -180,37 +180,13 @@ def : Pat<(i64 (ctpop i64:$src)), (POPCrr $src)>;
180180
//===----------------------------------------------------------------------===//
181181

182182
let Predicates = [Is64Bit] in {
183-
184-
def MULXrr : F3_1<2, 0b001001,
185-
(outs I64Regs:$rd), (ins I64Regs:$rs1, I64Regs:$rs2),
186-
"mulx $rs1, $rs2, $rd",
187-
[(set i64:$rd, (mul i64:$rs1, i64:$rs2))]>;
188-
def MULXri : F3_2<2, 0b001001,
189-
(outs IntRegs:$rd), (ins IntRegs:$rs1, i64imm:$simm13),
190-
"mulx $rs1, $simm13, $rd",
191-
[(set i64:$rd, (mul i64:$rs1, (i64 simm13:$simm13)))]>;
183+
defm MULX : F3_12<"mulx", 0b001001, mul, I64Regs, i64, i64imm>;
192184

193185
// Division can trap.
194186
let hasSideEffects = 1 in {
195-
def SDIVXrr : F3_1<2, 0b101101,
196-
(outs I64Regs:$rd), (ins I64Regs:$rs1, I64Regs:$rs2),
197-
"sdivx $rs1, $rs2, $rd",
198-
[(set i64:$rd, (sdiv i64:$rs1, i64:$rs2))]>;
199-
def SDIVXri : F3_2<2, 0b101101,
200-
(outs IntRegs:$rd), (ins IntRegs:$rs1, i64imm:$simm13),
201-
"sdivx $rs1, $simm13, $rd",
202-
[(set i64:$rd, (sdiv i64:$rs1, (i64 simm13:$simm13)))]>;
203-
204-
def UDIVXrr : F3_1<2, 0b001101,
205-
(outs I64Regs:$rd), (ins I64Regs:$rs1, I64Regs:$rs2),
206-
"udivx $rs1, $rs2, $rd",
207-
[(set i64:$rd, (udiv i64:$rs1, i64:$rs2))]>;
208-
def UDIVXri : F3_2<2, 0b001101,
209-
(outs IntRegs:$rd), (ins IntRegs:$rs1, i64imm:$simm13),
210-
"udivx $rs1, $simm13, $rd",
211-
[(set i64:$rd, (udiv i64:$rs1, (i64 simm13:$simm13)))]>;
187+
defm SDIVX : F3_12<"sdivx", 0b101101, sdiv, I64Regs, i64, i64imm>;
188+
defm UDIVX : F3_12<"udivx", 0b001101, udiv, I64Regs, i64, i64imm>;
212189
} // hasSideEffects = 1
213-
214190
} // Predicates = [Is64Bit]
215191

216192

llvm/lib/Target/Sparc/SparcInstrInfo.td

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -467,22 +467,6 @@ multiclass LoadA<string OpcStr, bits<6> Op3Val, bits<6> LoadAOp3Val,
467467
defm A : LoadASI<OpcStr, LoadAOp3Val, RC>;
468468
}
469469

470-
471-
// The LDSTUB instruction is supported for asm only.
472-
// It is unlikely that general-purpose code could make use of it.
473-
// CAS is preferred for sparc v9.
474-
def LDSTUBrr : F3_1<3, 0b001101, (outs IntRegs:$rd), (ins (MEMrr $rs1, $rs2):$addr),
475-
"ldstub [$addr], $rd", []>;
476-
def LDSTUBri : F3_2<3, 0b001101, (outs IntRegs:$rd), (ins (MEMri $rs1, $simm13):$addr),
477-
"ldstub [$addr], $rd", []>;
478-
def LDSTUBArr : F3_1_asi<3, 0b011101, (outs IntRegs:$rd),
479-
(ins (MEMrr $rs1, $rs2):$addr, ASITag:$asi),
480-
"ldstuba [$addr] $asi, $rd", []>;
481-
let Predicates = [HasV9], Uses = [ASR3] in
482-
def LDSTUBAri : F3_2<3, 0b011101, (outs IntRegs:$rd),
483-
(ins (MEMri $rs1, $simm13):$addr),
484-
"ldstuba [$addr] %asi, $rd", []>;
485-
486470
// Store multiclass - Define both Reg+Reg/Reg+Imm patterns in one shot.
487471
multiclass Store<string OpcStr, bits<6> Op3Val, SDPatternOperator OpNode,
488472
RegisterClass RC, ValueType Ty, InstrItinClass itin = IIC_st> {
@@ -740,6 +724,22 @@ let rd = 1, mayStore = 1, Uses = [FSR] in {
740724
"stx %fsr, [$addr]", []>, Requires<[HasV9]>;
741725
}
742726

727+
// B.7. Atomic Load-Store Unsigned Byte Instructions
728+
// (Atomic test-and-set)
729+
// TODO look into the possibility to use this to implment `atomic_flag`.
730+
// If it's possible, then LDSTUB is the preferred way to do it.
731+
def LDSTUBrr : F3_1<3, 0b001101, (outs IntRegs:$rd), (ins (MEMrr $rs1, $rs2):$addr),
732+
"ldstub [$addr], $rd", []>;
733+
def LDSTUBri : F3_2<3, 0b001101, (outs IntRegs:$rd), (ins (MEMri $rs1, $simm13):$addr),
734+
"ldstub [$addr], $rd", []>;
735+
def LDSTUBArr : F3_1_asi<3, 0b011101, (outs IntRegs:$rd),
736+
(ins (MEMrr $rs1, $rs2):$addr, ASITag:$asi),
737+
"ldstuba [$addr] $asi, $rd", []>;
738+
let Predicates = [HasV9], Uses = [ASR3] in
739+
def LDSTUBAri : F3_2<3, 0b011101, (outs IntRegs:$rd),
740+
(ins (MEMri $rs1, $simm13):$addr),
741+
"ldstuba [$addr] %asi, $rd", []>;
742+
743743
// Section B.8 - SWAP Register with Memory Instruction
744744
// (Atomic swap)
745745
let Constraints = "$val = $rd" in {

0 commit comments

Comments
 (0)