aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2015-08-28 12:46:22 +0200
committerLinaro Code Review <review@review.linaro.org>2015-09-08 11:21:38 +0000
commit2b815bca82ab79c754213b0b62392a0a4565c340 (patch)
tree09aec92dcc96f342dc88a07bc05191b7957266c8
parentffa11cb6df43b150180524b140a833b477040e49 (diff)
gcc/
Backport from trunk r222528. 2015-04-28 Yvan Roux <yvan.roux@linaro.org> * config/arm/arm.md (*arm_movt): Fix type attribute. (*cmpsi_shiftsi): Likewise. (*cmpsi_shiftsi_swp): Likewise. (*movsicc_insn): Likewise. (*cond_move): Likewise. (*if_plus_move): Likewise. (*if_move_plus): Likewise. (*if_arith_move): Likewise. (*if_move_arith): Likewise. (*if_shift_move): Likewise. (*if_move_shift): Likewise. (*arm_movtas_ze): Likewise. * config/arm/thumb2.md (*thumb2_movsicc_insn): Fix alternative redundancy and type attribute. (*thumb2_movsi_insn): Fix type attribute. (*thumb2_addsi_short): Likewise. (thumb2_addsi3_compare0): Likewise. (*thumb2_addsi3_compare0_scratch): Merge alternatives and fix attributes accordingly. gcc/ Backport from trunk r222572. 2015-04-29 Yvan Roux <yvan.roux@linaro.org> PR target/65924 * config/arm/thumb2.md (*thumb2_addsi3_compare0_scratch): Fix operand number in type attribute expression. gcc/testsuite/ Backport from trunk r222572. 2015-04-29 Yvan Roux <yvan.roux@linaro.org> PR target/65924 * gcc.target/arm/pr65924.c: New test. gcc/testsuite/ Backport from trunk r222798. 2015-05-05 Yvan Roux <yvan.roux@linaro.org> * gcc.target/arm/pr65067.c: Require Thumb2 effective target. * gcc.target/arm/pr65924.c: Likewise. Change-Id: I875677b8d018db179f66c9333b5867505ee5bcaa
-rw-r--r--gcc/config/arm/arm.md63
-rw-r--r--gcc/config/arm/thumb2.md69
-rw-r--r--gcc/testsuite/gcc.target/arm/pr65067.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/pr65924.c9
4 files changed, 109 insertions, 33 deletions
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index cbda4e5fe07..d8a28b3a5a9 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -5680,7 +5680,7 @@
[(set_attr "predicable" "yes")
(set_attr "predicable_short_it" "no")
(set_attr "length" "4")
- (set_attr "type" "mov_imm")]
+ (set_attr "type" "alu_sreg")]
)
(define_insn "*arm_movsi_insn"
@@ -6935,7 +6935,7 @@
[(set_attr "conds" "set")
(set_attr "shift" "1")
(set_attr "arch" "32,a,a")
- (set_attr "type" "alus_shift_imm,alu_shift_reg,alus_shift_imm")])
+ (set_attr "type" "alus_shift_imm,alus_shift_reg,alus_shift_imm")])
(define_insn "*cmpsi_shiftsi_swp"
[(set (reg:CC_SWP CC_REGNUM)
@@ -6948,7 +6948,7 @@
[(set_attr "conds" "set")
(set_attr "shift" "1")
(set_attr "arch" "32,a,a")
- (set_attr "type" "alus_shift_imm,alu_shift_reg,alus_shift_imm")])
+ (set_attr "type" "alus_shift_imm,alus_shift_reg,alus_shift_imm")])
(define_insn "*arm_cmpsi_negshiftsi_si"
[(set (reg:CC_Z CC_REGNUM)
@@ -7541,10 +7541,10 @@
(const_string "mov_imm")
(const_string "mov_reg"))
(const_string "mvn_imm")
- (const_string "mov_reg")
- (const_string "mov_reg")
- (const_string "mov_reg")
- (const_string "mov_reg")])]
+ (const_string "multiple")
+ (const_string "multiple")
+ (const_string "multiple")
+ (const_string "multiple")])]
)
(define_insn "*movsfcc_soft_insn"
@@ -8702,7 +8702,14 @@
return \"\";
"
[(set_attr "conds" "use")
- (set_attr "type" "mov_reg,mov_reg,multiple")
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 2 "const_int_operand" "")
+ (const_string "mov_imm")
+ (const_string "mov_reg"))
+ (if_then_else (match_operand 1 "const_int_operand" "")
+ (const_string "mov_imm")
+ (const_string "mov_reg"))
+ (const_string "multiple")])
(set_attr "length" "4,4,8")]
)
@@ -9498,8 +9505,8 @@
(const_string "alu_imm" )
(const_string "alu_sreg"))
(const_string "alu_imm")
- (const_string "alu_sreg")
- (const_string "alu_sreg")])]
+ (const_string "multiple")
+ (const_string "multiple")])]
)
(define_insn "*ifcompare_move_plus"
@@ -9536,7 +9543,13 @@
sub%D4\\t%0, %2, #%n3\;mov%d4\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "4,4,8,8")
- (set_attr "type" "alu_sreg,alu_imm,multiple,multiple")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 3 "const_int_operand" "")
+ (const_string "alu_imm" )
+ (const_string "alu_sreg"))
+ (const_string "alu_imm")
+ (const_string "multiple")
+ (const_string "multiple")])]
)
(define_insn "*ifcompare_arith_arith"
@@ -9631,7 +9644,11 @@
%I5%d4\\t%0, %2, %3\;mov%D4\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "4,8")
- (set_attr "type" "alu_shift_reg,multiple")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 3 "const_int_operand" "")
+ (const_string "alu_shift_imm" )
+ (const_string "alu_shift_reg"))
+ (const_string "multiple")])]
)
(define_insn "*ifcompare_move_arith"
@@ -9692,7 +9709,11 @@
%I5%D4\\t%0, %2, %3\;mov%d4\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "4,8")
- (set_attr "type" "alu_shift_reg,multiple")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 3 "const_int_operand" "")
+ (const_string "alu_shift_imm" )
+ (const_string "alu_shift_reg"))
+ (const_string "multiple")])]
)
(define_insn "*ifcompare_move_not"
@@ -9799,7 +9820,12 @@
[(set_attr "conds" "use")
(set_attr "shift" "2")
(set_attr "length" "4,8,8")
- (set_attr "type" "mov_shift_reg,multiple,multiple")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 3 "const_int_operand" "")
+ (const_string "mov_shift" )
+ (const_string "mov_shift_reg"))
+ (const_string "multiple")
+ (const_string "multiple")])]
)
(define_insn "*ifcompare_move_shift"
@@ -9837,7 +9863,12 @@
[(set_attr "conds" "use")
(set_attr "shift" "2")
(set_attr "length" "4,8,8")
- (set_attr "type" "mov_shift_reg,multiple,multiple")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 3 "const_int_operand" "")
+ (const_string "mov_shift" )
+ (const_string "mov_shift_reg"))
+ (const_string "multiple")
+ (const_string "multiple")])]
)
(define_insn "*ifcompare_shift_shift"
@@ -10918,7 +10949,7 @@
[(set_attr "predicable" "yes")
(set_attr "predicable_short_it" "no")
(set_attr "length" "4")
- (set_attr "type" "mov_imm")]
+ (set_attr "type" "alu_sreg")]
)
(define_insn "*arm_rev"
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md
index 1f681479d5d..2c91542efa3 100644
--- a/gcc/config/arm/thumb2.md
+++ b/gcc/config/arm/thumb2.md
@@ -300,7 +300,7 @@
ldr%?\\t%0, %1
str%?\\t%1, %0
str%?\\t%1, %0"
- [(set_attr "type" "mov_reg,alu_imm,alu_imm,alu_imm,mov_imm,load1,load1,store1,store1")
+ [(set_attr "type" "mov_reg,mov_imm,mov_imm,mvn_imm,mov_imm,load1,load1,store1,store1")
(set_attr "length" "2,4,2,4,4,4,4,4,4")
(set_attr "predicable" "yes")
(set_attr "predicable_short_it" "yes,no,yes,no,no,no,no,no,no")
@@ -486,12 +486,12 @@
)
(define_insn_and_split "*thumb2_movsicc_insn"
- [(set (match_operand:SI 0 "s_register_operand" "=l,l,r,r,r,r,r,r,r,r,r")
+ [(set (match_operand:SI 0 "s_register_operand" "=l,l,r,r,r,r,r,r,r,r,r,r")
(if_then_else:SI
(match_operator 3 "arm_comparison_operator"
[(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:SI 1 "arm_not_operand" "0 ,lPy,0 ,0,rI,K,rI,rI,K ,K,r")
- (match_operand:SI 2 "arm_not_operand" "lPy,0 ,rI,K,0 ,0,rI,K ,rI,K,r")))]
+ (match_operand:SI 1 "arm_not_operand" "0 ,lPy,0 ,0,rI,K,I ,r,rI,K ,K,r")
+ (match_operand:SI 2 "arm_not_operand" "lPy,0 ,rI,K,0 ,0,rI,I,K ,rI,K,r")))]
"TARGET_THUMB2"
"@
it\\t%D3\;mov%D3\\t%0, %2
@@ -504,12 +504,14 @@
#
#
#
+ #
#"
; alt 6: ite\\t%d3\;mov%d3\\t%0, %1\;mov%D3\\t%0, %2
- ; alt 7: ite\\t%d3\;mov%d3\\t%0, %1\;mvn%D3\\t%0, #%B2
- ; alt 8: ite\\t%d3\;mvn%d3\\t%0, #%B1\;mov%D3\\t%0, %2
- ; alt 9: ite\\t%d3\;mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2
- ; alt 10: ite\\t%d3\;mov%d3\\t%0, %1\;mov%D3\\t%0, %2
+ ; alt 7: ite\\t%d3\;mov%d3\\t%0, %1\;mov%D3\\t%0, %2
+ ; alt 8: ite\\t%d3\;mov%d3\\t%0, %1\;mvn%D3\\t%0, #%B2
+ ; alt 9: ite\\t%d3\;mvn%d3\\t%0, #%B1\;mov%D3\\t%0, %2
+ ; alt 10: ite\\t%d3\;mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2
+ ; alt 11: ite\\t%d3\;mov%d3\\t%0, %1\;mov%D3\\t%0, %2
"&& reload_completed"
[(const_int 0)]
{
@@ -540,10 +542,30 @@
operands[2])));
DONE;
}
- [(set_attr "length" "4,4,6,6,6,6,10,10,10,10,6")
- (set_attr "enabled_for_depr_it" "yes,yes,no,no,no,no,no,no,no,no,yes")
+ [(set_attr "length" "4,4,6,6,6,6,10,8,10,10,10,6")
+ (set_attr "enabled_for_depr_it" "yes,yes,no,no,no,no,no,no,no,no,no,yes")
(set_attr "conds" "use")
- (set_attr "type" "multiple")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 2 "const_int_operand" "")
+ (const_string "mov_imm")
+ (const_string "mov_reg"))
+ (if_then_else (match_operand 1 "const_int_operand" "")
+ (const_string "mov_imm")
+ (const_string "mov_reg"))
+ (if_then_else (match_operand 2 "const_int_operand" "")
+ (const_string "mov_imm")
+ (const_string "mov_reg"))
+ (const_string "mvn_imm")
+ (if_then_else (match_operand 1 "const_int_operand" "")
+ (const_string "mov_imm")
+ (const_string "mov_reg"))
+ (const_string "mvn_imm")
+ (const_string "multiple")
+ (const_string "multiple")
+ (const_string "multiple")
+ (const_string "multiple")
+ (const_string "multiple")
+ (const_string "multiple")])]
)
(define_insn "*thumb2_movsfcc_soft_insn"
@@ -1182,7 +1204,11 @@
"
[(set_attr "predicable" "yes")
(set_attr "length" "2")
- (set_attr "type" "alu_sreg")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 2 "const_int_operand" "")
+ (const_string "alu_imm")
+ (const_string "alu_sreg"))
+ (const_string "alu_imm")])]
)
(define_insn "*thumb2_subsi_short"
@@ -1247,14 +1273,21 @@
"
[(set_attr "conds" "set")
(set_attr "length" "2,2,4")
- (set_attr "type" "alu_sreg")]
+ (set_attr_alternative "type"
+ [(if_then_else (match_operand 2 "const_int_operand" "")
+ (const_string "alus_imm")
+ (const_string "alus_sreg"))
+ (const_string "alus_imm")
+ (if_then_else (match_operand 2 "const_int_operand" "")
+ (const_string "alus_imm")
+ (const_string "alus_sreg"))])]
)
(define_insn "*thumb2_addsi3_compare0_scratch"
[(set (reg:CC_NOOV CC_REGNUM)
(compare:CC_NOOV
- (plus:SI (match_operand:SI 0 "s_register_operand" "l,l, r,r")
- (match_operand:SI 1 "arm_add_operand" "Pv,l,IL,r"))
+ (plus:SI (match_operand:SI 0 "s_register_operand" "l, r")
+ (match_operand:SI 1 "arm_add_operand" "lPv,rIL"))
(const_int 0)))]
"TARGET_THUMB2"
"*
@@ -1271,8 +1304,10 @@
return \"cmn\\t%0, %1\";
"
[(set_attr "conds" "set")
- (set_attr "length" "2,2,4,4")
- (set_attr "type" "alus_imm,alus_sreg,alus_imm,alus_sreg")]
+ (set_attr "length" "2,4")
+ (set (attr "type") (if_then_else (match_operand 1 "const_int_operand" "")
+ (const_string "alus_imm")
+ (const_string "alus_sreg")))]
)
(define_insn "*thumb2_mulsi_short"
diff --git a/gcc/testsuite/gcc.target/arm/pr65067.c b/gcc/testsuite/gcc.target/arm/pr65067.c
index 9ddd7bb9e6e..05da29483f6 100644
--- a/gcc/testsuite/gcc.target/arm/pr65067.c
+++ b/gcc/testsuite/gcc.target/arm/pr65067.c
@@ -1,4 +1,5 @@
/* { dg-do compile } */
+/* { dg-require-effective-target arm_thumb2_ok } */
/* { dg-options "-mthumb -mcpu=cortex-m3 -O2" } */
struct tmp {
diff --git a/gcc/testsuite/gcc.target/arm/pr65924.c b/gcc/testsuite/gcc.target/arm/pr65924.c
new file mode 100644
index 00000000000..e1ad39475ab
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr65924.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-O2 -mthumb" } */
+
+int a, b, c;
+int fn1() {
+ if (b + a < 0)
+ c = 0;
+}