Skip to content

Commit 5b64851

Browse files
committed
[BPF] Refactor {LOAD,STORE}{,32} classes (NFC)
We will need different AsmString formats for load-acquire and store-release instructions. To make that easier, refactor {LOAD,STORE}{,32} classes to take AsmString as an argument directly. Add a BPFModeModifer parameter to STORE{,32} for similar reasons. No functional changes intended.
1 parent 087c7eb commit 5b64851

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

llvm/lib/Target/BPF/BPFInstrInfo.td

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -497,12 +497,11 @@ def LD_pseudo
497497
}
498498

499499
// STORE instructions
500-
class STORE<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
501-
: TYPE_LD_ST<BPF_MEM.Value, SizeOp.Value,
500+
class STORE<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString, list<dag> Pattern>
501+
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
502502
(outs),
503503
(ins GPR:$src, MEMri:$addr),
504-
"*("#OpcodeStr#" *)($addr) = $src",
505-
Pattern> {
504+
AsmString, Pattern> {
506505
bits<4> src;
507506
bits<20> addr;
508507

@@ -513,7 +512,7 @@ class STORE<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
513512
}
514513

515514
class STOREi64<BPFWidthModifer Opc, string OpcodeStr, PatFrag OpNode>
516-
: STORE<Opc, OpcodeStr, [(OpNode GPR:$src, ADDRri:$addr)]>;
515+
: STORE<Opc, BPF_MEM, "*("#OpcodeStr#" *)($addr) = $src", [(OpNode GPR:$src, ADDRri:$addr)]>;
517516

518517
let Predicates = [BPFNoALU32] in {
519518
def STW : STOREi64<BPF_W, "u32", truncstorei32>;
@@ -567,12 +566,11 @@ let Predicates = [BPFHasALU32, BPFHasStoreImm] in {
567566
}
568567

569568
// LOAD instructions
570-
class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, list<dag> Pattern>
569+
class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString, list<dag> Pattern>
571570
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
572571
(outs GPR:$dst),
573572
(ins MEMri:$addr),
574-
"$dst = *("#OpcodeStr#" *)($addr)",
575-
Pattern> {
573+
AsmString, Pattern> {
576574
bits<4> dst;
577575
bits<20> addr;
578576

@@ -583,7 +581,8 @@ class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, list<
583581
}
584582

585583
class LOADi64<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, PatFrag OpNode>
586-
: LOAD<SizeOp, ModOp, OpcodeStr, [(set i64:$dst, (OpNode ADDRri:$addr))]>;
584+
: LOAD<SizeOp, ModOp, "$dst = *("#OpcodeStr#" *)($addr)",
585+
[(set i64:$dst, (OpNode ADDRri:$addr))]>;
587586

588587
let isCodeGenOnly = 1 in {
589588
class CORE_LD<RegisterClass RegClass, string Sz>
@@ -1069,12 +1068,11 @@ def : Pat<(i32 (trunc GPR:$src)),
10691068
def : Pat<(i64 (anyext GPR32:$src)),
10701069
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$src, sub_32)>;
10711070

1072-
class STORE32<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
1073-
: TYPE_LD_ST<BPF_MEM.Value, SizeOp.Value,
1071+
class STORE32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString, list<dag> Pattern>
1072+
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
10741073
(outs),
10751074
(ins GPR32:$src, MEMri:$addr),
1076-
"*("#OpcodeStr#" *)($addr) = $src",
1077-
Pattern> {
1075+
AsmString, Pattern> {
10781076
bits<4> src;
10791077
bits<20> addr;
10801078

@@ -1085,20 +1083,20 @@ class STORE32<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
10851083
}
10861084

10871085
class STOREi32<BPFWidthModifer Opc, string OpcodeStr, PatFrag OpNode>
1088-
: STORE32<Opc, OpcodeStr, [(OpNode GPR32:$src, ADDRri:$addr)]>;
1086+
: STORE32<Opc, BPF_MEM, "*("#OpcodeStr#" *)($addr) = $src",
1087+
[(OpNode GPR32:$src, ADDRri:$addr)]>;
10891088

10901089
let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
10911090
def STW32 : STOREi32<BPF_W, "u32", store>;
10921091
def STH32 : STOREi32<BPF_H, "u16", truncstorei16>;
10931092
def STB32 : STOREi32<BPF_B, "u8", truncstorei8>;
10941093
}
10951094

1096-
class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, list<dag> Pattern>
1095+
class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString, list<dag> Pattern>
10971096
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
10981097
(outs GPR32:$dst),
10991098
(ins MEMri:$addr),
1100-
"$dst = *("#OpcodeStr#" *)($addr)",
1101-
Pattern> {
1099+
AsmString, Pattern> {
11021100
bits<4> dst;
11031101
bits<20> addr;
11041102

@@ -1109,7 +1107,8 @@ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, lis
11091107
}
11101108

11111109
class LOADi32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, PatFrag OpNode>
1112-
: LOAD32<SizeOp, ModOp, OpcodeStr, [(set i32:$dst, (OpNode ADDRri:$addr))]>;
1110+
: LOAD32<SizeOp, ModOp, "$dst = *("#OpcodeStr#" *)($addr)",
1111+
[(set i32:$dst, (OpNode ADDRri:$addr))]>;
11131112

11141113
let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
11151114
def LDW32 : LOADi32<BPF_W, BPF_MEM, "u32", load>;

0 commit comments

Comments
 (0)