Commit 88f519b2 by Matthew Gretton-Dann Committed by Matthew Gretton-Dann

re PR target/54974 ([ARM] [thumb] Incorrect placement of constant pools)

	PR target/54974
	* config/arm/arm.md (thumb2_pool_range, pool_range): Add comment on
	Thumb pool ranges.
	(thumb1_extendhisi2): Reduce Thumb pool range.
	(arm_movdi): Likewise.
	(thumb1_movdi_insn): Likewise.
	(thumb1_movsi_insn): Likewise.
	(pic_load_addr_unified): Likewise.
	(pic_load_addr_32bit): Likewise.
	(pic_load_addr_thumb1): Likewise.
	(thumb1_movhf): Likewise.
	(arm_movsf_soft_insn): Likewise.
	(thumb1_movsf_soft_insn): Likewise.
	(movdf_soft_insn): Likewise.
	(thumb1_movdf_soft_insn): Likewise.
	* config/arm/neon.md (*neon_mov<mode>): Likewise.
	(*neon_mov<mode>): Likwise.
	* config/arm/thumb2.md: (*thumb2_movsi_insn): Likewise.
	(*thumb2_movhi_insn): Likewise.
	(*thumb2_extendqisi_v6): Likewise.
	(*thumb2_zero_extendqisi_v6): Likewise.
	(*thumb2_zero_extendqisi2_v6): Likewise.
	* config/arm/vfp.md: (*thumb2_movsi_vfp): Likewise.
	(*movdi_vfp): Likewise.
	(*movdi_vfp_cortexa8): Likewise.
	(*thumb2_movsf_vfp): Likewise.
	(*thumb2_movdf_vfp): Likewise.

From-SVN: r193930
parent 02f9e21a
2012-11-29 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
PR target/54974
* config/arm/arm.md (thumb2_pool_range, pool_range): Add comment on
Thumb pool ranges.
(thumb1_extendhisi2): Reduce Thumb pool range.
(arm_movdi): Likewise.
(thumb1_movdi_insn): Likewise.
(thumb1_movsi_insn): Likewise.
(pic_load_addr_unified): Likewise.
(pic_load_addr_32bit): Likewise.
(pic_load_addr_thumb1): Likewise.
(thumb1_movhf): Likewise.
(arm_movsf_soft_insn): Likewise.
(thumb1_movsf_soft_insn): Likewise.
(movdf_soft_insn): Likewise.
(thumb1_movdf_soft_insn): Likewise.
* config/arm/neon.md (*neon_mov<mode>): Likewise.
(*neon_mov<mode>): Likwise.
* config/arm/thumb2.md: (*thumb2_movsi_insn): Likewise.
(*thumb2_movhi_insn): Likewise.
(*thumb2_extendqisi_v6): Likewise.
(*thumb2_zero_extendqisi_v6): Likewise.
(*thumb2_zero_extendqisi2_v6): Likewise.
* config/arm/vfp.md: (*thumb2_movsi_vfp): Likewise.
(*movdi_vfp): Likewise.
(*movdi_vfp_cortexa8): Likewise.
(*thumb2_movsf_vfp): Likewise.
(*thumb2_movdf_vfp): Likewise.
2012-11-29 Kai Tietz <ktietz@redhat.com> 2012-11-29 Kai Tietz <ktietz@redhat.com>
PR target/55171 PR target/55171
...@@ -297,6 +297,9 @@ ...@@ -297,6 +297,9 @@
; POOL_RANGE is how far away from a constant pool entry that this insn ; POOL_RANGE is how far away from a constant pool entry that this insn
; can be placed. If the distance is zero, then this insn will never ; can be placed. If the distance is zero, then this insn will never
; reference the pool. ; reference the pool.
; Note that for Thumb constant pools the PC value is rounded down to the
; nearest multiple of four. Therefore, THUMB2_POOL_RANGE (and POOL_RANGE for
; Thumb insns) should be set to <max_range> - 2.
; NEG_POOL_RANGE is nonzero for insns that can reference a constant pool entry ; NEG_POOL_RANGE is nonzero for insns that can reference a constant pool entry
; before its address. It is set to <max_range> - (8 + <data_size>). ; before its address. It is set to <max_range> - (8 + <data_size>).
(define_attr "arm_pool_range" "" (const_int 0)) (define_attr "arm_pool_range" "" (const_int 0))
...@@ -4966,7 +4969,7 @@ ...@@ -4966,7 +4969,7 @@
(const_int 2) (const_int 4)) (const_int 2) (const_int 4))
(const_int 4)]) (const_int 4)])
(set_attr "type" "alu_shift,load_byte") (set_attr "type" "alu_shift,load_byte")
(set_attr "pool_range" "*,1020")] (set_attr "pool_range" "*,1018")]
) )
;; This pattern will only be used when ldsh is not available ;; This pattern will only be used when ldsh is not available
...@@ -5373,7 +5376,7 @@ ...@@ -5373,7 +5376,7 @@
(set_attr "type" "*,*,*,load2,store2") (set_attr "type" "*,*,*,load2,store2")
(set_attr "arm_pool_range" "*,*,*,1020,*") (set_attr "arm_pool_range" "*,*,*,1020,*")
(set_attr "arm_neg_pool_range" "*,*,*,1004,*") (set_attr "arm_neg_pool_range" "*,*,*,1004,*")
(set_attr "thumb2_pool_range" "*,*,*,4096,*") (set_attr "thumb2_pool_range" "*,*,*,4094,*")
(set_attr "thumb2_neg_pool_range" "*,*,*,0,*")] (set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
) )
...@@ -5512,7 +5515,7 @@ ...@@ -5512,7 +5515,7 @@
[(set_attr "length" "4,4,6,2,2,6,4,4") [(set_attr "length" "4,4,6,2,2,6,4,4")
(set_attr "type" "*,*,*,load2,store2,load2,store2,*") (set_attr "type" "*,*,*,load2,store2,load2,store2,*")
(set_attr "insn" "*,mov,*,*,*,*,*,mov") (set_attr "insn" "*,mov,*,*,*,*,*,mov")
(set_attr "pool_range" "*,*,*,*,*,1020,*,*")] (set_attr "pool_range" "*,*,*,*,*,1018,*,*")]
) )
(define_expand "movsi" (define_expand "movsi"
...@@ -5682,7 +5685,7 @@ ...@@ -5682,7 +5685,7 @@
mov\\t%0, %1" mov\\t%0, %1"
[(set_attr "length" "2,2,4,4,2,2,2,2,2") [(set_attr "length" "2,2,4,4,2,2,2,2,2")
(set_attr "type" "*,*,*,*,load1,store1,load1,store1,*") (set_attr "type" "*,*,*,*,load1,store1,load1,store1,*")
(set_attr "pool_range" "*,*,*,*,*,*,1020,*,*") (set_attr "pool_range" "*,*,*,*,*,*,1018,*,*")
(set_attr "conds" "set,clob,*,*,nocond,nocond,nocond,nocond,nocond")]) (set_attr "conds" "set,clob,*,*,nocond,nocond,nocond,nocond,nocond")])
(define_split (define_split
...@@ -5790,7 +5793,7 @@ ...@@ -5790,7 +5793,7 @@
(match_dup 2)] UNSPEC_PIC_BASE))] (match_dup 2)] UNSPEC_PIC_BASE))]
"operands[3] = TARGET_THUMB ? GEN_INT (4) : GEN_INT (8);" "operands[3] = TARGET_THUMB ? GEN_INT (4) : GEN_INT (8);"
[(set_attr "type" "load1,load1,load1") [(set_attr "type" "load1,load1,load1")
(set_attr "pool_range" "4096,4096,1024") (set_attr "pool_range" "4096,4094,1022")
(set_attr "neg_pool_range" "4084,0,0") (set_attr "neg_pool_range" "4084,0,0")
(set_attr "arch" "a,t2,t1") (set_attr "arch" "a,t2,t1")
(set_attr "length" "8,6,4")] (set_attr "length" "8,6,4")]
...@@ -5806,7 +5809,10 @@ ...@@ -5806,7 +5809,10 @@
"TARGET_32BIT && flag_pic" "TARGET_32BIT && flag_pic"
"ldr%?\\t%0, %1" "ldr%?\\t%0, %1"
[(set_attr "type" "load1") [(set_attr "type" "load1")
(set_attr "pool_range" "4096") (set (attr "pool_range")
(if_then_else (eq_attr "is_thumb" "no")
(const_int 4096)
(const_int 4094)))
(set (attr "neg_pool_range") (set (attr "neg_pool_range")
(if_then_else (eq_attr "is_thumb" "no") (if_then_else (eq_attr "is_thumb" "no")
(const_int 4084) (const_int 4084)
...@@ -5819,7 +5825,7 @@ ...@@ -5819,7 +5825,7 @@
"TARGET_THUMB1 && flag_pic" "TARGET_THUMB1 && flag_pic"
"ldr\\t%0, %1" "ldr\\t%0, %1"
[(set_attr "type" "load1") [(set_attr "type" "load1")
(set (attr "pool_range") (const_int 1024))] (set (attr "pool_range") (const_int 1018))]
) )
(define_insn "pic_add_dot_plus_four" (define_insn "pic_add_dot_plus_four"
...@@ -6614,7 +6620,7 @@ ...@@ -6614,7 +6620,7 @@
[(set_attr "length" "2") [(set_attr "length" "2")
(set_attr "type" "*,load1,store1,*,*") (set_attr "type" "*,load1,store1,*,*")
(set_attr "insn" "mov,*,*,mov,mov") (set_attr "insn" "mov,*,*,mov,mov")
(set_attr "pool_range" "*,1020,*,*,*") (set_attr "pool_range" "*,1018,*,*,*")
(set_attr "conds" "clob,nocond,nocond,nocond,nocond")]) (set_attr "conds" "clob,nocond,nocond,nocond,nocond")])
(define_expand "movsf" (define_expand "movsf"
...@@ -6669,7 +6675,8 @@ ...@@ -6669,7 +6675,8 @@
[(set_attr "predicable" "yes") [(set_attr "predicable" "yes")
(set_attr "type" "*,load1,store1") (set_attr "type" "*,load1,store1")
(set_attr "insn" "mov,*,*") (set_attr "insn" "mov,*,*")
(set_attr "pool_range" "*,4096,*") (set_attr "arm_pool_range" "*,4096,*")
(set_attr "thumb2_pool_range" "*,4094,*")
(set_attr "arm_neg_pool_range" "*,4084,*") (set_attr "arm_neg_pool_range" "*,4084,*")
(set_attr "thumb2_neg_pool_range" "*,0,*")] (set_attr "thumb2_neg_pool_range" "*,0,*")]
) )
...@@ -6691,7 +6698,7 @@ ...@@ -6691,7 +6698,7 @@
mov\\t%0, %1" mov\\t%0, %1"
[(set_attr "length" "2") [(set_attr "length" "2")
(set_attr "type" "*,load1,store1,load1,store1,*,*") (set_attr "type" "*,load1,store1,load1,store1,*,*")
(set_attr "pool_range" "*,*,*,1020,*,*,*") (set_attr "pool_range" "*,*,*,1018,*,*,*")
(set_attr "insn" "*,*,*,*,*,mov,mov") (set_attr "insn" "*,*,*,*,*,mov,mov")
(set_attr "conds" "clob,nocond,nocond,nocond,nocond,nocond,nocond")] (set_attr "conds" "clob,nocond,nocond,nocond,nocond,nocond,nocond")]
) )
...@@ -6780,7 +6787,8 @@ ...@@ -6780,7 +6787,8 @@
" "
[(set_attr "length" "8,12,16,8,8") [(set_attr "length" "8,12,16,8,8")
(set_attr "type" "*,*,*,load2,store2") (set_attr "type" "*,*,*,load2,store2")
(set_attr "pool_range" "*,*,*,1020,*") (set_attr "arm_pool_range" "*,*,*,1020,*")
(set_attr "thumb2_pool_range" "*,*,*,1018,*")
(set_attr "arm_neg_pool_range" "*,*,*,1004,*") (set_attr "arm_neg_pool_range" "*,*,*,1004,*")
(set_attr "thumb2_neg_pool_range" "*,*,*,0,*")] (set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
) )
...@@ -6824,7 +6832,7 @@ ...@@ -6824,7 +6832,7 @@
[(set_attr "length" "4,2,2,6,4,4") [(set_attr "length" "4,2,2,6,4,4")
(set_attr "type" "*,load2,store2,load2,store2,*") (set_attr "type" "*,load2,store2,load2,store2,*")
(set_attr "insn" "*,*,*,*,*,mov") (set_attr "insn" "*,*,*,*,*,mov")
(set_attr "pool_range" "*,*,*,1020,*,*")] (set_attr "pool_range" "*,*,*,1018,*,*")]
) )
......
...@@ -196,7 +196,8 @@ ...@@ -196,7 +196,8 @@
(set_attr "type" "*,f_stored,*,f_loadd,*,*,alu,load2,store2") (set_attr "type" "*,f_stored,*,f_loadd,*,*,alu,load2,store2")
(set_attr "insn" "*,*,*,*,*,*,mov,*,*") (set_attr "insn" "*,*,*,*,*,*,mov,*,*")
(set_attr "length" "4,4,4,4,4,4,8,8,8") (set_attr "length" "4,4,4,4,4,4,8,8,8")
(set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*") (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
(set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,1004,*,*,*,1004,*")]) (set_attr "neg_pool_range" "*,*,*,1004,*,*,*,1004,*")])
(define_insn "*neon_mov<mode>" (define_insn "*neon_mov<mode>"
...@@ -241,7 +242,8 @@ ...@@ -241,7 +242,8 @@
(set_attr "type" "*,*,*,*,*,*,alu,load4,store4") (set_attr "type" "*,*,*,*,*,*,alu,load4,store4")
(set_attr "insn" "*,*,*,*,*,*,mov,*,*") (set_attr "insn" "*,*,*,*,*,*,mov,*,*")
(set_attr "length" "4,8,4,8,8,8,16,8,16") (set_attr "length" "4,8,4,8,8,8,16,8,16")
(set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*") (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
(set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,996,*,*,*,996,*")]) (set_attr "neg_pool_range" "*,*,*,996,*,*,*,996,*")])
(define_expand "movti" (define_expand "movti"
......
...@@ -182,7 +182,7 @@ ...@@ -182,7 +182,7 @@
str%?\\t%1, %0" str%?\\t%1, %0"
[(set_attr "type" "*,*,*,*,load1,load1,store1,store1") [(set_attr "type" "*,*,*,*,load1,load1,store1,store1")
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "pool_range" "*,*,*,*,1020,4096,*,*") (set_attr "pool_range" "*,*,*,*,1018,4094,*,*")
(set_attr "neg_pool_range" "*,*,*,*,0,0,*,*")] (set_attr "neg_pool_range" "*,*,*,*,0,0,*,*")]
) )
...@@ -217,7 +217,7 @@ ...@@ -217,7 +217,7 @@
ldr%(h%)\\t%0, %1\\t%@ movhi" ldr%(h%)\\t%0, %1\\t%@ movhi"
[(set_attr "type" "*,*,store1,load1") [(set_attr "type" "*,*,store1,load1")
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "pool_range" "*,*,*,4096") (set_attr "pool_range" "*,*,*,4094")
(set_attr "neg_pool_range" "*,*,*,250")] (set_attr "neg_pool_range" "*,*,*,250")]
) )
...@@ -570,7 +570,7 @@ ...@@ -570,7 +570,7 @@
ldr%(sb%)\\t%0, %1" ldr%(sb%)\\t%0, %1"
[(set_attr "type" "alu_shift,load_byte") [(set_attr "type" "alu_shift,load_byte")
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "pool_range" "*,4096") (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")] (set_attr "neg_pool_range" "*,250")]
) )
...@@ -583,7 +583,7 @@ ...@@ -583,7 +583,7 @@
ldr%(h%)\\t%0, %1" ldr%(h%)\\t%0, %1"
[(set_attr "type" "alu_shift,load_byte") [(set_attr "type" "alu_shift,load_byte")
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "pool_range" "*,4096") (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")] (set_attr "neg_pool_range" "*,250")]
) )
...@@ -596,7 +596,7 @@ ...@@ -596,7 +596,7 @@
ldr%(b%)\\t%0, %1\\t%@ zero_extendqisi2" ldr%(b%)\\t%0, %1\\t%@ zero_extendqisi2"
[(set_attr "type" "alu_shift,load_byte") [(set_attr "type" "alu_shift,load_byte")
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "pool_range" "*,4096") (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")] (set_attr "neg_pool_range" "*,250")]
) )
......
...@@ -123,7 +123,7 @@ ...@@ -123,7 +123,7 @@
(set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores") (set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores")
(set_attr "neon_type" "*,*,*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*") (set_attr "neon_type" "*,*,*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*")
(set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*") (set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*")
(set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,*,1020,*") (set_attr "pool_range" "*,*,*,*,1018,4094,*,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*, 0, 0,*,*,*,*,*,1008,*")] (set_attr "neg_pool_range" "*,*,*,*, 0, 0,*,*,*,*,*,1008,*")]
) )
...@@ -176,7 +176,8 @@ ...@@ -176,7 +176,8 @@
(const_int 8) (const_int 8)
(const_int 4))] (const_int 4))]
(const_int 4))) (const_int 4)))
(set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*") (set_attr "arm_pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
(set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*") (set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
(set_attr "arch" "t2,any,any,any,a,t2,any,any,any,any,any,any")] (set_attr "arch" "t2,any,any,any,a,t2,any,any,any,any,any,any")]
) )
...@@ -224,7 +225,8 @@ ...@@ -224,7 +225,8 @@
* 4")] * 4")]
(const_int 4))) (const_int 4)))
(set_attr "predicable" "yes") (set_attr "predicable" "yes")
(set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*") (set_attr "arm_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
(set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*") (set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
(set (attr "ce_count") (set (attr "ce_count")
(symbol_ref "get_attr_length (insn) / 4")) (symbol_ref "get_attr_length (insn) / 4"))
...@@ -413,7 +415,7 @@ ...@@ -413,7 +415,7 @@
"r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*") "r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*")
(set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*") (set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*")
(set_attr "insn" "*,*,*,*,*,*,*,*,mov") (set_attr "insn" "*,*,*,*,*,*,*,*,mov")
(set_attr "pool_range" "*,*,*,1020,*,4092,*,*,*") (set_attr "pool_range" "*,*,*,1018,*,4090,*,*,*")
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")] (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
) )
...@@ -509,7 +511,7 @@ ...@@ -509,7 +511,7 @@
(const_int 8) (const_int 8)
(const_int 4))] (const_int 4))]
(const_int 4))) (const_int 4)))
(set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*") (set_attr "pool_range" "*,*,*,1018,*,4094,*,*,*")
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")] (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment