diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/570-checker-select/src/Main.java | 76 | ||||
| -rw-r--r-- | test/626-checker-arm64-scratch-register/src/Main.java | 11 |
2 files changed, 81 insertions, 6 deletions
diff --git a/test/570-checker-select/src/Main.java b/test/570-checker-select/src/Main.java index e0a76ca022..3ac6f89c5f 100644 --- a/test/570-checker-select/src/Main.java +++ b/test/570-checker-select/src/Main.java @@ -371,6 +371,49 @@ public class Main { return a > b ? x : y; } + /// CHECK-START-ARM: long Main.$noinline$LongEqNonmatCond_LongVarVar(long, long, long, long) disassembly (after) + /// CHECK: Select + /// CHECK-NEXT: cmp {{r\d+}}, {{r\d+}} + /// CHECK-NEXT: it eq + /// CHECK-NEXT: cmpeq {{r\d+}}, {{r\d+}} + /// CHECK-NEXT: it eq + + public static long $noinline$LongEqNonmatCond_LongVarVar(long a, long b, long x, long y) { + return a == b ? x : y; + } + + /// CHECK-START-ARM: long Main.$noinline$LongNonmatCondCst_LongVarVar(long, long, long) disassembly (after) + /// CHECK: Select + /// CHECK-NEXT: mov ip, #52720 + /// CHECK-NEXT: movt ip, #35243 + /// CHECK-NEXT: cmp {{r\d+}}, ip + /// CHECK-NEXT: sbcs ip, {{r\d+}}, #{{\d+}} + /// CHECK-NEXT: it ge + + public static long $noinline$LongNonmatCondCst_LongVarVar(long a, long x, long y) { + return a > 0x89ABCDEFL ? x : y; + } + + /// CHECK-START-ARM: long Main.$noinline$LongNonmatCondCst_LongVarVar2(long, long, long) disassembly (after) + /// CHECK: Select + /// CHECK-NEXT: mov ip, #{{\d+}} + /// CHECK-NEXT: movt ip, #{{\d+}} + /// CHECK-NEXT: cmp {{r\d+}}, ip + + public static long $noinline$LongNonmatCondCst_LongVarVar2(long a, long x, long y) { + return a > 0x0123456789ABCDEFL ? x : y; + } + + /// CHECK-START-ARM: long Main.$noinline$LongNonmatCondCst_LongVarVar3(long, long, long) disassembly (after) + /// CHECK: Select + /// CHECK-NEXT: cmp {{r\d+}}, {{r\d+}} + /// CHECK-NOT: sbcs + /// CHECK-NOT: cmp + + public static long $noinline$LongNonmatCondCst_LongVarVar3(long a, long x, long y) { + return a > 0x7FFFFFFFFFFFFFFFL ? x : y; + } + /// CHECK-START: long Main.LongMatCond_LongVarVar(long, long, long, long) register (after) /// CHECK: <<Cond:z\d+>> LessThanOrEqual [{{j\d+}},{{j\d+}}] /// CHECK: <<Sel1:j\d+>> Select [{{j\d+}},{{j\d+}},<<Cond>>] @@ -612,6 +655,39 @@ public class Main { assertEqual(5, IntMatCond_IntVarVar(3, 2, 5, 7)); assertEqual(8, IntMatCond_IntVarVar(2, 3, 5, 7)); + assertEqual(0xAAAAAAAA55555555L, + LongNonmatCond_LongVarVar(3L, 2L, 0xAAAAAAAA55555555L, 0x8888888877777777L)); + assertEqual(0x8888888877777777L, + LongNonmatCond_LongVarVar(2L, 2L, 0xAAAAAAAA55555555L, 0x8888888877777777L)); + assertEqual(0x8888888877777777L, + LongNonmatCond_LongVarVar(2L, 3L, 0xAAAAAAAA55555555L, 0x8888888877777777L)); + assertEqual(0xAAAAAAAA55555555L, LongNonmatCond_LongVarVar(0x0000000100000000L, + 0x00000000FFFFFFFFL, + 0xAAAAAAAA55555555L, + 0x8888888877777777L)); + assertEqual(0x8888888877777777L, LongNonmatCond_LongVarVar(0x00000000FFFFFFFFL, + 0x0000000100000000L, + 0xAAAAAAAA55555555L, + 0x8888888877777777L)); + + assertEqual(0x8888888877777777L, $noinline$LongEqNonmatCond_LongVarVar(2L, + 3L, + 0xAAAAAAAA55555555L, + 0x8888888877777777L)); + assertEqual(0xAAAAAAAA55555555L, $noinline$LongEqNonmatCond_LongVarVar(2L, + 2L, + 0xAAAAAAAA55555555L, + 0x8888888877777777L)); + assertEqual(0x8888888877777777L, $noinline$LongEqNonmatCond_LongVarVar(0x10000000000L, + 0L, + 0xAAAAAAAA55555555L, + 0x8888888877777777L)); + + assertEqual(5L, $noinline$LongNonmatCondCst_LongVarVar2(0x7FFFFFFFFFFFFFFFL, 5L, 7L)); + assertEqual(7L, $noinline$LongNonmatCondCst_LongVarVar2(2L, 5L, 7L)); + + assertEqual(7L, $noinline$LongNonmatCondCst_LongVarVar3(2L, 5L, 7L)); + assertEqual(5, FloatLtNonmatCond_IntVarVar(3, 2, 5, 7)); assertEqual(7, FloatLtNonmatCond_IntVarVar(2, 3, 5, 7)); assertEqual(7, FloatLtNonmatCond_IntVarVar(Float.NaN, 2, 5, 7)); diff --git a/test/626-checker-arm64-scratch-register/src/Main.java b/test/626-checker-arm64-scratch-register/src/Main.java index 6dd4374116..139491769e 100644 --- a/test/626-checker-arm64-scratch-register/src/Main.java +++ b/test/626-checker-arm64-scratch-register/src/Main.java @@ -70,7 +70,7 @@ public class Main { /// CHECK: end_block /// CHECK: begin_block /// CHECK: name "<<ElseBlock>>" - /// CHECK: ParallelMove moves:[#100->d17,32(sp)->d1,36(sp)->d2,d17->d3,d3->d4,d4->d5,d5->d6,d6->d7,d7->d18,d18->d19,d19->d20,d20->d21,d21->d22,d22->d23,d23->d10,d10->d11,d11->d12,24(sp)->d13,28(sp)->d14,d14->16(sp),d12->20(sp),d13->24(sp),d1->28(sp),d2->32(sp),16(sp)->36(sp),20(sp)->40(sp)] + /// CHECK: ParallelMove moves:[40(sp)->d0,24(sp)->32(sp),28(sp)->36(sp),d0->d3,d3->d4,d2->d5,d4->d6,d5->d7,d6->d18,d7->d19,d18->d20,d19->d21,d20->d22,d21->d23,d22->d10,d23->d11,16(sp)->24(sp),20(sp)->28(sp),d10->d14,d11->d12,d12->d13,d13->d1,d14->d2,32(sp)->16(sp),36(sp)->20(sp)] /// CHECK: end_block /// CHECK-START-ARM64: void Main.test() disassembly (after) @@ -85,7 +85,7 @@ public class Main { /// CHECK: end_block /// CHECK: begin_block /// CHECK: name "<<ElseBlock>>" - /// CHECK: ParallelMove moves:[invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid] + /// CHECK: ParallelMove moves:[invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid,invalid->invalid] /// CHECK: fmov d31, d2 /// CHECK: ldr s2, [sp, #36] /// CHECK: ldr w16, [sp, #16] @@ -111,11 +111,10 @@ public class Main { /// CHECK: fmov d6, d5 /// CHECK: fmov d5, d4 /// CHECK: fmov d4, d3 - /// CHECK: fmov d3, d17 - /// CHECK: fmov d17, d13 + /// CHECK: fmov d3, d13 /// CHECK: ldr s13, [sp, #24] - /// CHECK: str s17, [sp, #24] - /// CHECK: ldr s17, pc+{{\d+}} (addr {{0x[0-9a-f]+}}) (100) + /// CHECK: str s3, [sp, #24] + /// CHECK: ldr s3, pc+{{\d+}} (addr {{0x[0-9a-f]+}}) (100) /// CHECK: end_block public void test() { |