diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 2c1367977a68fc8e4289118e07bb61398856791e..aa09e93d85e9628e8944e03498697eb9597ef867 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -949,8 +949,8 @@ (define_insn "*cb1" (define_expand "tbranch_3" [(set (pc) (if_then_else - (EQL (match_operand:ALLI 0 "register_operand") - (match_operand 1 "aarch64_simd_shift_imm_")) + (EQL (match_operand:SHORT 0 "register_operand") + (match_operand 1 "const0_operand")) (label_ref (match_operand 2 "")) (pc)))] "" diff --git a/gcc/testsuite/gcc.target/aarch64/tbz_2.c b/gcc/testsuite/gcc.target/aarch64/tbz_2.c new file mode 100644 index 0000000000000000000000000000000000000000..ec128b58f35276a7c5452685a65c73f95f2d5f9a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/tbz_2.c @@ -0,0 +1,130 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2 -std=c99 -fno-unwind-tables -fno-asynchronous-unwind-tables" } */ +/* { dg-final { check-function-bodies "**" "" "" { target { le } } } } */ + +#include + +void h(void); + +/* +** g1: +** cbnz w0, .L[0-9]+ +** ret +** ... +*/ +void g1(int x) +{ + if (__builtin_expect (x, 0)) + h (); +} + +/* +** g2: +** tbnz x0, 0, .L[0-9]+ +** ret +** ... +*/ +void g2(int x) +{ + if (__builtin_expect (x & 1, 0)) + h (); +} + +/* +** g3: +** tbnz x0, 3, .L[0-9]+ +** ret +** ... +*/ +void g3(int x) +{ + if (__builtin_expect (x & 8, 0)) + h (); +} + +/* +** g4: +** tbnz w0, #31, .L[0-9]+ +** ret +** ... +*/ +void g4(int x) +{ + if (__builtin_expect (x & (1 << 31), 0)) + h (); +} + +/* +** g5: +** tst w0, 255 +** bne .L[0-9]+ +** ret +** ... +*/ +void g5(char x) +{ + if (__builtin_expect (x, 0)) + h (); +} + +/* +** g6: +** tbnz w0, 0, .L[0-9]+ +** ret +** ... +*/ +void g6(char x) +{ + if (__builtin_expect (x & 1, 0)) + h (); +} + +/* +** g7: +** tst w0, 3 +** bne .L[0-9]+ +** ret +** ... +*/ +void g7(char x) +{ + if (__builtin_expect (x & 3, 0)) + h (); +} + +/* +** g8: +** tbnz w0, 7, .L[0-9]+ +** ret +** ... +*/ +void g8(char x) +{ + if (__builtin_expect (x & (1 << 7), 0)) + h (); +} + +/* +** g9: +** tbnz w0, 0, .L[0-9]+ +** ret +** ... +*/ +void g9(bool x) +{ + if (__builtin_expect (x, 0)) + h (); +} + +/* +** g10: +** tbnz w0, 0, .L[0-9]+ +** ret +** ... +*/ +void g10(bool x) +{ + if (__builtin_expect (x & 1, 0)) + h (); +} +