diff options
Diffstat (limited to 'test/codegen')
| -rw-r--r-- | test/codegen/comparisons.go | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/test/codegen/comparisons.go b/test/codegen/comparisons.go index eb2f3317c9..90808573c2 100644 --- a/test/codegen/comparisons.go +++ b/test/codegen/comparisons.go @@ -253,6 +253,8 @@ func CmpLogicalToZero(a, b, c uint32, d, e uint64) uint64 { // 'comparing to zero' expressions // var + const +// 'x-const' might be canonicalized to 'x+(-const)', so we check both +// CMN and CMP for subtraction expressions to make the pattern robust. func CmpToZero_ex1(a int64, e int32) int { // arm64:`CMN`,-`ADD`,`(BMI|BPL)` if a+3 < 0 { @@ -269,37 +271,41 @@ func CmpToZero_ex1(a int64, e int32) int { return 2 } - // arm64:`CMP`,-`SUB`,`(BMI|BPL)` + // arm64:`CMP|CMN`,-`(ADD|SUB)`,`(BMI|BPL)` if a-7 < 0 { return 3 } - // arm64:`CMP`,-`SUB`,`(BMI|BPL)` + // arm64:`CMP|CMN`,-`(ADD|SUB)`,`(BMI|BPL)` if a-11 >= 0 { return 4 } - // arm64:`CMP`,-`SUB`,`BEQ`,`(BMI|BPL)` + // arm64:`CMP|CMN`,-`(ADD|SUB)`,`BEQ`,`(BMI|BPL)` if a-19 > 0 { return 4 } // arm64:`CMNW`,-`ADDW`,`(BMI|BPL)` + // arm:`CMN`,-`ADD`,`(BMI|BPL)` if e+3 < 0 { return 5 } // arm64:`CMNW`,-`ADDW`,`(BMI|BPL)` + // arm:`CMN`,-`ADD`,`(BMI|BPL)` if e+13 >= 0 { return 6 } - // arm64:`CMPW`,-`SUBW`,`(BMI|BPL)` + // arm64:`CMPW|CMNW`,`(BMI|BPL)` + // arm:`CMP|CMN`, -`(ADD|SUB)`, `(BMI|BPL)` if e-7 < 0 { return 7 } - // arm64:`CMPW`,-`SUBW`,`(BMI|BPL)` + // arm64:`CMPW|CMNW`,`(BMI|BPL)` + // arm:`CMP|CMN`, -`(ADD|SUB)`, `(BMI|BPL)` if e-11 >= 0 { return 8 } @@ -326,11 +332,13 @@ func CmpToZero_ex2(a, b, c int64, e, f, g int32) int { } // arm64:`CMNW`,-`ADDW`,`(BMI|BPL)` + // arm:`CMN`,-`ADD`,`(BMI|BPL)` if e+f < 0 { return 5 } // arm64:`CMNW`,-`ADDW`,`(BMI|BPL)` + // arm:`CMN`,-`ADD`,`(BMI|BPL)` if f+g >= 0 { return 6 } @@ -350,11 +358,13 @@ func CmpToZero_ex3(a, b, c, d int64, e, f, g, h int32) int { } // arm64:`CMNW`,-`MADDW`,`MULW`,`BEQ`,`(BMI|BPL)` + // arm:`CMN`,-`MULA`,`MUL`,`BEQ`,`(BMI|BPL)` if e+f*g > 0 { return 5 } // arm64:`CMNW`,-`MADDW`,`MULW`,`BEQ`,`(BMI|BPL)` + // arm:`CMN`,-`MULA`,`MUL`,`BEQ`,`(BMI|BPL)` if f+g*h <= 0 { return 6 } @@ -384,3 +394,16 @@ func CmpToZero_ex4(a, b, c, d int64, e, f, g, h int32) int { } return 0 } + +func CmpToZero_ex5(e, f int32, u uint32) int { + // arm:`CMN`,-`ADD`,`BEQ`,`(BMI|BPL)` + if e+f<<1 > 0 { + return 1 + } + + // arm:`CMP`,-`SUB`,`(BMI|BPL)` + if f-int32(u>>2) >= 0 { + return 2 + } + return 0 +} |
