diff options
| author | Yonghong Song <yhs@fb.com> | 2017-09-11 23:43:35 +0000 |
|---|---|---|
| committer | Yonghong Song <yhs@fb.com> | 2017-09-11 23:43:35 +0000 |
| commit | be9c00347fa7dcfb78f9f3a6c6c61a00a9071d31 (patch) | |
| tree | 2803940d7947fbaa96faf1b40254362b90118cd1 /llvm/lib/Target | |
| parent | 424aac368782c99537ab36cdf2f803d9ceebd8a5 (diff) | |
| download | bcm5719-llvm-be9c00347fa7dcfb78f9f3a6c6c61a00a9071d31.tar.gz bcm5719-llvm-be9c00347fa7dcfb78f9f3a6c6c61a00a9071d31.zip | |
bpf: add " ll" in the LD_IMM64 asmstring
This partially revert previous fix in commit f5858045aa0b
("bpf: proper print imm64 expression in inst printer").
In that commit, the original suffix "ll" is removed from
LD_IMM64 asmstring. In the customer print method, the "ll"
suffix is printed if the rhs is an immediate. For example,
"r2 = 5ll" => "r2 = 5ll", and "r3 = varll" => "r3 = var".
This has an issue though for assembler. Since assembler
relies on asmstring to do pattern matching, it will not
be able to distiguish between "mov r2, 5" and
"ld_imm64 r2, 5" since both asmstring is "r2 = 5".
In such cases, the assembler uses 64bit load for all
"r = <val>" asm insts.
This patch adds back " ll" suffix for ld_imm64 with one
additional space for "#reg = #global_var" case.
Signed-off-by: Yonghong Song <yhs@fb.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
llvm-svn: 312978
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/BPF/BPFInstrInfo.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/BPF/InstPrinter/BPFInstPrinter.cpp | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/BPF/BPFInstrInfo.td b/llvm/lib/Target/BPF/BPFInstrInfo.td index d4c50e768f7..bef6ce0852a 100644 --- a/llvm/lib/Target/BPF/BPFInstrInfo.td +++ b/llvm/lib/Target/BPF/BPFInstrInfo.td @@ -249,7 +249,7 @@ class MOV_RI<string OpcodeStr> class LD_IMM64<bits<4> Pseudo, string OpcodeStr> : InstBPF<(outs GPR:$dst), (ins u64imm:$imm), - "$dst "#OpcodeStr#" ${imm}", + "$dst "#OpcodeStr#" ${imm} ll", [(set GPR:$dst, (i64 imm:$imm))]> { bits<3> mode; diff --git a/llvm/lib/Target/BPF/InstPrinter/BPFInstPrinter.cpp b/llvm/lib/Target/BPF/InstPrinter/BPFInstPrinter.cpp index bb5546ea40e..536ae4df937 100644 --- a/llvm/lib/Target/BPF/InstPrinter/BPFInstPrinter.cpp +++ b/llvm/lib/Target/BPF/InstPrinter/BPFInstPrinter.cpp @@ -88,7 +88,7 @@ void BPFInstPrinter::printImm64Operand(const MCInst *MI, unsigned OpNo, raw_ostream &O) { const MCOperand &Op = MI->getOperand(OpNo); if (Op.isImm()) - O << (uint64_t)Op.getImm() << "ll"; + O << (uint64_t)Op.getImm(); else if (Op.isExpr()) printExpr(Op.getExpr(), O); else |

