Message ID | 5387514E.6080303@arm.com |
---|---|
State | New |
Headers | show |
On 05/29/14 16:25, Kyrill Tkachov wrote: > Hi all, > > I noticed that in some of our move patterns the movw instruction is given the mov_reg type rather than the > mov_imm type that all other uses of movw have. This patch fixes that. > > Scanning through our pipeline descriptions I see that mov_imm is treated the same way as mov_reg everywhere anyway. In the Cortex-A7 description we do have a bit more complicated logic: > > ;; ALU instruction with an immediate operand can dual-issue. > (define_insn_reservation "cortex_a7_alu_imm" 2 > (and (eq_attr "tune" "cortexa7") > (ior (eq_attr "type" "adr,alu_imm,alus_imm,logic_imm,logics_imm,\ > mov_imm,mvn_imm,extend") > (and (eq_attr "type" "mov_reg,mov_shift,mov_shift_reg") > (not (eq_attr "length" "8"))))) > "cortex_a7_ex2|cortex_a7_ex1") > > In the two patterns that I change the mov_imm has a length of 4 an hence will still use this reservation. > Thus I don't expect codegen to change at all from this patch but for future scheduling jobs this could make a > difference. This is ok. Well spotted. Ramana > > Tested arm-none-eabi on qemu. > > Ok for trunk? > > Thanks, > Kyrill > > 2014-05-29 Kyrylo Tkachov <kyrylo.tkachov@arm.com> > > * config/arm/thumb2.md (*thumb2_movhi_insn): Set type of movw > to mov_imm. > * config/arm/vfp.md (*thumb2_movsi_vfp): Likewise. >
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md index 10bc8b1..6ea0810 100644 --- a/gcc/config/arm/thumb2.md +++ b/gcc/config/arm/thumb2.md @@ -329,7 +329,7 @@ movw%?\\t%0, %L1\\t%@ movhi str%(h%)\\t%1, %0\\t%@ movhi ldr%(h%)\\t%0, %1\\t%@ movhi" - [(set_attr "type" "mov_reg,mov_imm,mov_imm,mov_reg,store1,load1") + [(set_attr "type" "mov_reg,mov_imm,mov_imm,mov_imm,store1,load1") (set_attr "predicable" "yes") (set_attr "predicable_short_it" "yes,no,yes,no,no,no") (set_attr "length" "2,4,2,4,4,4") diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md index e1a48ee..8147624 100644 --- a/gcc/config/arm/vfp.md +++ b/gcc/config/arm/vfp.md @@ -100,7 +100,7 @@ " [(set_attr "predicable" "yes") (set_attr "predicable_short_it" "yes,no,yes,no,no,no,no,no,no,no,no,no,no,no") - (set_attr "type" "mov_reg,mov_reg,mov_reg,mvn_reg,mov_reg,load1,load1,store1,store1,f_mcr,f_mrc,fmov,f_loads,f_stores") + (set_attr "type" "mov_reg,mov_reg,mov_reg,mvn_reg,mov_imm,load1,load1,store1,store1,f_mcr,f_mrc,fmov,f_loads,f_stores") (set_attr "length" "2,4,2,4,4,4,4,4,4,4,4,4,4,4") (set_attr "pool_range" "*,*,*,*,*,1018,4094,*,*,*,*,*,1018,*") (set_attr "neg_pool_range" "*,*,*,*,*, 0, 0,*,*,*,*,*,1008,*")]