[bpf] mark mov instructions as ReMaterializable
authorAlexei Starovoitov <alexei.starovoitov@gmail.com>
Tue, 31 Mar 2015 02:49:58 +0000 (02:49 +0000)
committerAlexei Starovoitov <alexei.starovoitov@gmail.com>
Tue, 31 Mar 2015 02:49:58 +0000 (02:49 +0000)
loading immediate into register is cheap, so take advantage of remat.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233666 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/BPF/BPFInstrInfo.td
test/CodeGen/BPF/basictest.ll

index 346c7f9b787c7878b398fa5ee00966b84911fa9f..26b2cfebdc830d0b80cd421f289ed7312b21c558 100644 (file)
@@ -231,8 +231,6 @@ class MOV_RI<string OpcodeStr>
   let BPFSrc = 0;   // BPF_K
   let BPFClass = 7; // BPF_ALU64
 }
-def MOV_rr : MOV_RR<"mov">;
-def MOV_ri : MOV_RI<"mov">;
 
 class LD_IMM64<bits<4> Pseudo, string OpcodeStr>
     : InstBPF<(outs GPR:$dst), (ins u64imm:$imm),
@@ -255,7 +253,12 @@ class LD_IMM64<bits<4> Pseudo, string OpcodeStr>
   let size = 3;     // BPF_DW
   let BPFClass = 0; // BPF_LD
 }
+
+let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
 def LD_imm64 : LD_IMM64<0, "ld_64">;
+def MOV_rr : MOV_RR<"mov">;
+def MOV_ri : MOV_RI<"mov">;
+}
 
 def LD_pseudo
     : InstBPF<(outs GPR:$dst), (ins i64imm:$pseudo, u64imm:$imm),
index c0b6af414d0c3128febd1ccc2ad44b11c6d0e4a2..2a2d49878a633db11d8c30a5709831f6f7800ab2 100644 (file)
@@ -8,8 +8,8 @@ define i32 @test0(i32 %X) {
 }
 
 ; CHECK-LABEL: store_imm:
-; CHECK: stw  0(r1), r0
-; CHECK: stw  4(r2), r0
+; CHECK: stw  0(r1), r{{[03]}}
+; CHECK: stw  4(r2), r{{[03]}}
 define i32 @store_imm(i32* %a, i32* %b) {
 entry:
   store i32 0, i32* %a, align 4