Skip to content

Commit 69f1aeb

Browse files
authored
[BPF] Remove skb operand of LD_ABS/LD_IND instructions (#157344)
The instructions already have R6 register in the Uses list, there is no need for an additional explicit `GPR:$skb` operand. This simplifies intrinsic selection and makes the instructions decodable without post-decoding pass inserting R6 operand.
1 parent 258b798 commit 69f1aeb

File tree

5 files changed

+6
-45
lines changed

5 files changed

+6
-45
lines changed

llvm/lib/Target/BPF/BPFISelDAGToDAG.cpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -193,27 +193,6 @@ void BPFDAGToDAGISel::Select(SDNode *Node) {
193193
switch (Opcode) {
194194
default:
195195
break;
196-
case ISD::INTRINSIC_W_CHAIN: {
197-
unsigned IntNo = Node->getConstantOperandVal(1);
198-
switch (IntNo) {
199-
case Intrinsic::bpf_load_byte:
200-
case Intrinsic::bpf_load_half:
201-
case Intrinsic::bpf_load_word: {
202-
SDLoc DL(Node);
203-
SDValue Chain = Node->getOperand(0);
204-
SDValue N1 = Node->getOperand(1);
205-
SDValue Skb = Node->getOperand(2);
206-
SDValue N3 = Node->getOperand(3);
207-
208-
SDValue R6Reg = CurDAG->getRegister(BPF::R6, MVT::i64);
209-
Chain = CurDAG->getCopyToReg(Chain, DL, R6Reg, Skb, SDValue());
210-
Node = CurDAG->UpdateNodeOperands(Node, Chain, N1, R6Reg, N3);
211-
break;
212-
}
213-
}
214-
break;
215-
}
216-
217196
case ISD::FrameIndex: {
218197
int FI = cast<FrameIndexSDNode>(Node)->getIndex();
219198
EVT VT = Node->getValueType(0);

llvm/lib/Target/BPF/BPFInstrInfo.td

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,10 +1189,9 @@ let Defs = [R0, R1, R2, R3, R4, R5], Uses = [R6], hasSideEffects = 1,
11891189
hasExtraDefRegAllocReq = 1, hasExtraSrcRegAllocReq = 1, mayLoad = 1 in {
11901190
class LOAD_ABS<BPFWidthModifer SizeOp, string OpcodeStr, Intrinsic OpNode>
11911191
: TYPE_LD_ST<BPF_ABS.Value, SizeOp.Value,
1192-
(outs),
1193-
(ins GPR:$skb, i64imm:$imm),
1192+
(outs), (ins i64imm:$imm),
11941193
"r0 = *("#OpcodeStr#" *)skb[$imm]",
1195-
[(set R0, (OpNode GPR:$skb, i64immSExt32:$imm))]> {
1194+
[(set R0, (OpNode R6, i64immSExt32:$imm))]> {
11961195
bits<32> imm;
11971196

11981197
let Inst{31-0} = imm;
@@ -1201,10 +1200,9 @@ class LOAD_ABS<BPFWidthModifer SizeOp, string OpcodeStr, Intrinsic OpNode>
12011200

12021201
class LOAD_IND<BPFWidthModifer SizeOp, string OpcodeStr, Intrinsic OpNode>
12031202
: TYPE_LD_ST<BPF_IND.Value, SizeOp.Value,
1204-
(outs),
1205-
(ins GPR:$skb, GPR:$val),
1203+
(outs), (ins GPR:$val),
12061204
"r0 = *("#OpcodeStr#" *)skb[$val]",
1207-
[(set R0, (OpNode GPR:$skb, GPR:$val))]> {
1205+
[(set R0, (OpNode R6, GPR:$val))]> {
12081206
bits<4> val;
12091207

12101208
let Inst{55-52} = val;

llvm/lib/Target/BPF/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ tablegen(LLVM BPFGenAsmMatcher.inc -gen-asm-matcher)
66
tablegen(LLVM BPFGenAsmWriter.inc -gen-asm-writer)
77
tablegen(LLVM BPFGenCallingConv.inc -gen-callingconv)
88
tablegen(LLVM BPFGenDAGISel.inc -gen-dag-isel)
9-
tablegen(LLVM BPFGenDisassemblerTables.inc -gen-disassembler
10-
-ignore-non-decodable-operands)
9+
tablegen(LLVM BPFGenDisassemblerTables.inc -gen-disassembler)
1110
tablegen(LLVM BPFGenInstrInfo.inc -gen-instr-info)
1211
tablegen(LLVM BPFGenMCCodeEmitter.inc -gen-emitter)
1312
tablegen(LLVM BPFGenRegisterInfo.inc -gen-register-info)

llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -205,18 +205,6 @@ DecodeStatus BPFDisassembler::getInstruction(MCInst &Instr, uint64_t &Size,
205205
Op.setImm(Make_64(Hi, Op.getImm()));
206206
break;
207207
}
208-
case BPF::LD_ABS_B:
209-
case BPF::LD_ABS_H:
210-
case BPF::LD_ABS_W:
211-
case BPF::LD_IND_B:
212-
case BPF::LD_IND_H:
213-
case BPF::LD_IND_W: {
214-
auto Op = Instr.getOperand(0);
215-
Instr.clear();
216-
Instr.addOperand(MCOperand::createReg(BPF::R6));
217-
Instr.addOperand(Op);
218-
break;
219-
}
220208
}
221209

222210
return Result;

utils/bazel/llvm-project-overlay/llvm/BUILD.bazel

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2307,10 +2307,7 @@ llvm_target_lib_list = [lib for lib in [
23072307
"lib/Target/BPF/BPFGenCallingConv.inc": ["-gen-callingconv"],
23082308
"lib/Target/BPF/BPFGenDAGISel.inc": ["-gen-dag-isel"],
23092309
"lib/Target/BPF/BPFGenGlobalISel.inc": ["-gen-global-isel"],
2310-
"lib/Target/BPF/BPFGenDisassemblerTables.inc": [
2311-
"-gen-disassembler",
2312-
"-ignore-non-decodable-operands",
2313-
],
2310+
"lib/Target/BPF/BPFGenDisassemblerTables.inc": ["-gen-disassembler"],
23142311
"lib/Target/BPF/BPFGenMCCodeEmitter.inc": ["-gen-emitter"],
23152312
"lib/Target/BPF/BPFGenInstrInfo.inc": ["-gen-instr-info"],
23162313
"lib/Target/BPF/BPFGenRegisterInfo.inc": ["-gen-register-info"],

0 commit comments

Comments
 (0)