diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-11-09 23:53:45 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-11-09 23:53:45 +0100 |
| commit | 98469166098170fc67d3eb043656c3e79190b31f (patch) | |
| tree | d38b631f527a85e7393867b3381230271c12194f /validation/optim | |
| parent | 55d44f307c12fe0241d0a12e1dfe0320a54510af (diff) | |
| parent | c60237251a55984b1fcf6302d25650d35533dc2a (diff) | |
| download | sparse-dev-98469166098170fc67d3eb043656c3e79190b31f.tar.gz | |
Merge branch 'optim-cmp' into next
* simplify & canonicalize compares
Diffstat (limited to 'validation/optim')
| -rw-r--r-- | validation/optim/canonical-cmp.c | 125 | ||||
| -rw-r--r-- | validation/optim/canonical-cmpu.c | 15 | ||||
| -rw-r--r-- | validation/optim/cmp-sext-sext.c | 17 | ||||
| -rw-r--r-- | validation/optim/cmp-sext-simm.c | 29 | ||||
| -rw-r--r-- | validation/optim/cmp-sext-uimm.c | 25 | ||||
| -rw-r--r-- | validation/optim/cmp-sext.c | 23 | ||||
| -rw-r--r-- | validation/optim/cmp-zext-simm.c | 23 | ||||
| -rw-r--r-- | validation/optim/cmp-zext-uimm0.c | 21 | ||||
| -rw-r--r-- | validation/optim/cmp-zext-uimm1.c | 15 | ||||
| -rw-r--r-- | validation/optim/cmp-zext-uimm2.c | 29 | ||||
| -rw-r--r-- | validation/optim/cmp-zext-zext.c | 17 | ||||
| -rw-r--r-- | validation/optim/cmp-zext.c | 17 | ||||
| -rw-r--r-- | validation/optim/set-uimm1.c | 10 | ||||
| -rw-r--r-- | validation/optim/set-uimm2.c | 12 | ||||
| -rw-r--r-- | validation/optim/set-uimm3.c | 10 | ||||
| -rw-r--r-- | validation/optim/zext-cmpu.c | 16 |
16 files changed, 293 insertions, 111 deletions
diff --git a/validation/optim/canonical-cmp.c b/validation/optim/canonical-cmp.c index e0ca7db3..9b930b1c 100644 --- a/validation/optim/canonical-cmp.c +++ b/validation/optim/canonical-cmp.c @@ -1,124 +1,27 @@ typedef signed int sint; typedef unsigned int uint; -sint seq(sint p, sint a) { return (123 == p) ? a : 0; } -sint sne(sint p, sint a) { return (123 != p) ? a : 0; } +sint seq(sint p, sint a) { return (123 == p) == (p == 123); } +sint sne(sint p, sint a) { return (123 != p) == (p != 123); } -sint slt(sint p, sint a) { return (123 > p) ? a : 0; } -sint sle(sint p, sint a) { return (123 >= p) ? a : 0; } -sint sge(sint p, sint a) { return (123 <= p) ? a : 0; } -sint sgt(sint p, sint a) { return (123 < p) ? a : 0; } +sint slt(sint p, sint a) { return (123 > p) == (p < 123); } +sint sle(sint p, sint a) { return (123 >= p) == (p <= 123); } +sint sge(sint p, sint a) { return (123 <= p) == (p >= 123); } +sint sgt(sint p, sint a) { return (123 < p) == (p > 123); } -uint ueq(uint p, uint a) { return (123 == p) ? a : 0; } -uint une(uint p, uint a) { return (123 != p) ? a : 0; } +uint ueq(uint p, uint a) { return (123 == p) == (p == 123); } +uint une(uint p, uint a) { return (123 != p) == (p != 123); } -uint ubt(uint p, uint a) { return (123 > p) ? a : 0; } -uint ube(uint p, uint a) { return (123 >= p) ? a : 0; } -uint uae(uint p, uint a) { return (123 <= p) ? a : 0; } -uint uat(uint p, uint a) { return (123 < p) ? a : 0; } +uint ubt(uint p, uint a) { return (123 > p) == (p < 123); } +uint ube(uint p, uint a) { return (123 >= p) == (p <= 123); } +uint uae(uint p, uint a) { return (123 <= p) == (p >= 123); } +uint uat(uint p, uint a) { return (123 < p) == (p > 123); } /* * check-name: canonical-cmp + * check-description: check that constants move rightside * check-command: test-linearize -Wno-decl $file * + * check-output-ignore * check-output-excludes: \\$123, - * - * check-output-start -seq: -.L0: - <entry-point> - seteq.32 %r3 <- %arg1, $123 - select.32 %r4 <- %r3, %arg2, $0 - ret.32 %r4 - - -sne: -.L2: - <entry-point> - setne.32 %r8 <- %arg1, $123 - select.32 %r9 <- %r8, %arg2, $0 - ret.32 %r9 - - -slt: -.L4: - <entry-point> - setlt.32 %r13 <- %arg1, $123 - select.32 %r14 <- %r13, %arg2, $0 - ret.32 %r14 - - -sle: -.L6: - <entry-point> - setle.32 %r18 <- %arg1, $123 - select.32 %r19 <- %r18, %arg2, $0 - ret.32 %r19 - - -sge: -.L8: - <entry-point> - setge.32 %r23 <- %arg1, $123 - select.32 %r24 <- %r23, %arg2, $0 - ret.32 %r24 - - -sgt: -.L10: - <entry-point> - setgt.32 %r28 <- %arg1, $123 - select.32 %r29 <- %r28, %arg2, $0 - ret.32 %r29 - - -ueq: -.L12: - <entry-point> - seteq.32 %r33 <- %arg1, $123 - select.32 %r34 <- %r33, %arg2, $0 - ret.32 %r34 - - -une: -.L14: - <entry-point> - setne.32 %r38 <- %arg1, $123 - select.32 %r39 <- %r38, %arg2, $0 - ret.32 %r39 - - -ubt: -.L16: - <entry-point> - setb.32 %r43 <- %arg1, $123 - select.32 %r44 <- %r43, %arg2, $0 - ret.32 %r44 - - -ube: -.L18: - <entry-point> - setbe.32 %r48 <- %arg1, $123 - select.32 %r49 <- %r48, %arg2, $0 - ret.32 %r49 - - -uae: -.L20: - <entry-point> - setae.32 %r53 <- %arg1, $123 - select.32 %r54 <- %r53, %arg2, $0 - ret.32 %r54 - - -uat: -.L22: - <entry-point> - seta.32 %r58 <- %arg1, $123 - select.32 %r59 <- %r58, %arg2, $0 - ret.32 %r59 - - - * check-output-end */ diff --git a/validation/optim/canonical-cmpu.c b/validation/optim/canonical-cmpu.c new file mode 100644 index 00000000..29bbd0a8 --- /dev/null +++ b/validation/optim/canonical-cmpu.c @@ -0,0 +1,15 @@ +// canonicalize to == or != +int cmp_ltu_eq0(unsigned int x) { return (x < 1) == (x == 0); } +int cmp_geu_ne0(unsigned int x) { return (x >= 1) == (x != 0); } + +// canonicalize to the smaller value +int cmp_ltu(unsigned int x) { return (x < 256) == (x <= 255); } +int cmp_geu(unsigned int x) { return (x >= 256) == (x > 255); } + +/* + * check-name: canonical-cmpu + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-sext-sext.c b/validation/optim/cmp-sext-sext.c new file mode 100644 index 00000000..3bd22fb7 --- /dev/null +++ b/validation/optim/cmp-sext-sext.c @@ -0,0 +1,17 @@ +#define T(TYPE) __##TYPE##_TYPE__ +#define cmp(TYPE, X, OP, Y) ((T(TYPE)) X OP (T(TYPE)) Y) +#define TEST(T1, T2, X, OP, Y) cmp(T1, X, OP, Y) == cmp(T2, X, OP, Y) + +#define ARGS(TYPE) T(TYPE) a, T(TYPE)b + +_Bool cmpe_sext_sext(ARGS(INT32)) { return TEST(UINT64, UINT32, a, ==, b); } +_Bool cmps_sext_sext(ARGS(INT32)) { return TEST( INT64, INT32, a, < , b); } +_Bool cmpu_sext_sext(ARGS(INT32)) { return TEST(UINT64, UINT32, a, < , b); } + +/* + * check-name: cmp-sext-sext + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-sext-simm.c b/validation/optim/cmp-sext-simm.c new file mode 100644 index 00000000..a8b2a8f9 --- /dev/null +++ b/validation/optim/cmp-sext-simm.c @@ -0,0 +1,29 @@ +#define sext(X) ((long long) (X)) +#define POS (1LL << 31) +#define NEG (-POS - 1) + +static int lt_ge0(int x) { return (sext(x) < (POS + 0)) == 1; } +static int lt_ge1(int x) { return (sext(x) < (POS + 1)) == 1; } +static int le_ge0(int x) { return (sext(x) <= (POS + 0)) == 1; } +static int le_ge1(int x) { return (sext(x) <= (POS + 1)) == 1; } +static int lt_lt0(int x) { return (sext(x) < (NEG - 0)) == 1; } +static int lt_lt1(int x) { return (sext(x) < (NEG - 1)) == 1; } +static int le_lt0(int x) { return (sext(x) <= (NEG - 0)) == 1; } +static int le_lt1(int x) { return (sext(x) <= (NEG - 1)) == 1; } + +static int gt_ge0(int x) { return (sext(x) > (POS + 0)) == 0; } +static int gt_ge1(int x) { return (sext(x) > (POS + 1)) == 0; } +static int ge_ge0(int x) { return (sext(x) >= (POS + 0)) == 0; } +static int ge_ge1(int x) { return (sext(x) >= (POS + 1)) == 0; } +static int gt_lt0(int x) { return (sext(x) > (NEG - 0)) == 0; } +static int gt_lt1(int x) { return (sext(x) > (NEG - 1)) == 0; } +static int ge_lt0(int x) { return (sext(x) >= (NEG - 0)) == 0; } +static int ge_lt1(int x) { return (sext(x) >= (NEG - 1)) == 0; } + +/* + * check-name: cmp-sext-simm + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-sext-uimm.c b/validation/optim/cmp-sext-uimm.c new file mode 100644 index 00000000..05da042f --- /dev/null +++ b/validation/optim/cmp-sext-uimm.c @@ -0,0 +1,25 @@ +#define sext(X) ((unsigned long long) (X)) +#define POS (1ULL << 31) +#define NEG ((unsigned long long) -POS) + +int sext_ltu_p2(int x) { return (sext(x) < (POS + 2)) == (x >= 0); } +int sext_ltu_p1(int x) { return (sext(x) < (POS + 1)) == (x >= 0); } +int sext_ltu_p0(int x) { return (sext(x) < (POS + 0)) == (x >= 0); } + +int sext_leu_p1(int x) { return (sext(x) <= (POS + 1)) == (x >= 0); } +int sext_leu_p0(int x) { return (sext(x) <= (POS + 0)) == (x >= 0); } + +int sext_geu_m1(int x) { return (sext(x) >= (NEG - 1)) == (x < 0); } +int sext_geu_m2(int x) { return (sext(x) >= (NEG - 2)) == (x < 0); } + +int sext_gtu_m1(int x) { return (sext(x) > (NEG - 1)) == (x < 0); } +int sext_gtu_m2(int x) { return (sext(x) > (NEG - 2)) == (x < 0); } +int sext_gtu_m3(int x) { return (sext(x) > (NEG - 3)) == (x < 0); } + +/* + * check-name: cmp-sext-uimm + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-sext.c b/validation/optim/cmp-sext.c new file mode 100644 index 00000000..13f4fbdf --- /dev/null +++ b/validation/optim/cmp-sext.c @@ -0,0 +1,23 @@ +#define T(TYPE) __##TYPE##_TYPE__ +#define cmp(TYPE, X, OP, Y) ((T(TYPE)) X OP (T(TYPE)) Y) +#define TEST(T1, T2, X, OP, Y) cmp(T1, X, OP, Y) == cmp(T2, X, OP, Y) + +#define ARGS(TYPE) T(TYPE) a, T(TYPE)b + +_Bool cmpe_sextp(ARGS(INT32)) { return TEST(UINT64, UINT32, a, ==, 0x7fffffff); } +_Bool cmps_sextp(ARGS(INT32)) { return TEST( INT64, INT32, a, < , 0x7fffffff); } +_Bool cmpu_sextp(ARGS(INT32)) { return TEST(UINT64, UINT32, a, < , 0x7fffffff); } +_Bool cmpe_sextn(ARGS(INT32)) { return TEST(UINT64, UINT32, a, ==, -1); } +_Bool cmps_sextn(ARGS(INT32)) { return TEST( INT64, INT32, a, < , -1); } +_Bool cmpu_sextn(ARGS(INT32)) { return TEST(UINT64, UINT32, a, < , -1); } + +_Bool cmpltu_sext(int a) { return (a < 0x80000000ULL) == (a >= 0); } +_Bool cmpgtu_sext(int a) { return (a >= 0x80000000ULL) == (a < 0); } + +/* + * check-name: cmp-sext + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-zext-simm.c b/validation/optim/cmp-zext-simm.c new file mode 100644 index 00000000..dda237d7 --- /dev/null +++ b/validation/optim/cmp-zext-simm.c @@ -0,0 +1,23 @@ +#define ZEXT(X) ((long long)(X)) +#define BITS ((long long)(~0U)) + +int zext_ult(unsigned int x) { return (ZEXT(x) < (BITS + 1)) == 1; } +int zext_ule(unsigned int x) { return (ZEXT(x) <= (BITS + 0)) == 1; } +int zext_uge(unsigned int x) { return (ZEXT(x) >= (BITS + 1)) == 0; } +int zext_ugt(unsigned int x) { return (ZEXT(x) > (BITS + 0)) == 0; } + +int zext_0le(unsigned int x) { return (ZEXT(x) <= 0) == (x == 0); } +int zext_0ge(unsigned int x) { return (ZEXT(x) > 0) == (x != 0); } + +int zext_llt(unsigned int x) { return (ZEXT(x) < -1) == 0; } +int zext_lle(unsigned int x) { return (ZEXT(x) <= -1) == 0; } +int zext_lge(unsigned int x) { return (ZEXT(x) >= -1) == 1; } +int zext_lgt(unsigned int x) { return (ZEXT(x) > -1) == 1; } + +/* + * check-name: cmp-zext-simm + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-zext-uimm0.c b/validation/optim/cmp-zext-uimm0.c new file mode 100644 index 00000000..f7bec338 --- /dev/null +++ b/validation/optim/cmp-zext-uimm0.c @@ -0,0 +1,21 @@ +#define zext(X) ((unsigned long long) (X)) +#define MAX (1ULL << 32) + +#define TEST(X,OP,VAL) (zext(X) OP (VAL)) == (X OP (VAL)) + +int zext_ltu_0(unsigned int x) { return TEST(x, < , MAX); } +int zext_ltu_m(unsigned int x) { return TEST(x, < , MAX - 1); } +int zext_lte_0(unsigned int x) { return TEST(x, <=, MAX); } +int zext_lte_m(unsigned int x) { return TEST(x, <=, MAX - 1); } +int zext_gte_0(unsigned int x) { return TEST(x, >=, MAX); } +int zext_gte_m(unsigned int x) { return TEST(x, >=, MAX - 1); } +int zext_gtu_0(unsigned int x) { return TEST(x, > , MAX); } +int zext_gtu_m(unsigned int x) { return TEST(x, > , MAX - 1); } + +/* + * check-name: cmp-zext-uimm0 + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-zext-uimm1.c b/validation/optim/cmp-zext-uimm1.c new file mode 100644 index 00000000..c21780ea --- /dev/null +++ b/validation/optim/cmp-zext-uimm1.c @@ -0,0 +1,15 @@ +#define zext(X) ((unsigned long long) (X)) +#define BITS ((1ULL << 32) - 1) + +int zext_lt_p(unsigned int x) { return (zext(x) < (BITS + 1)) == 1; } +int zext_le_p(unsigned int x) { return (zext(x) <= (BITS )) == 1; } +int zext_ge_p(unsigned int x) { return (zext(x) >= (BITS + 1)) == 0; } +int zext_gt_p(unsigned int x) { return (zext(x) > (BITS )) == 0; } + +/* + * check-name: cmp-zext-uimm1 + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-zext-uimm2.c b/validation/optim/cmp-zext-uimm2.c new file mode 100644 index 00000000..214bd96f --- /dev/null +++ b/validation/optim/cmp-zext-uimm2.c @@ -0,0 +1,29 @@ +#define zext(X) ((unsigned long long) (X)) + +int zext_ltu_q(unsigned x) { return (zext(x) < 0x100000001UL) == 1; } +int zext_ltu_p(unsigned x) { return (zext(x) < 0x100000000UL) == 1; } +int zext_ltu_0(unsigned x) { return (zext(x) < 0x0ffffffffUL) == (x < 0xffffffff); } +int zext_ltu_m(unsigned x) { return (zext(x) < 0x0fffffffeUL) == (x < 0xfffffffe); } + +int zext_leu_q(unsigned x) { return (zext(x) <= 0x100000001UL) == 1; } +int zext_leu_p(unsigned x) { return (zext(x) <= 0x100000000UL) == 1; } +int zext_leu_0(unsigned x) { return (zext(x) <= 0x0ffffffffUL) == 1; } +int zext_leu_m(unsigned x) { return (zext(x) <= 0x0fffffffeUL) == (x <= 0xfffffffe); } + +int zext_geu_q(unsigned x) { return (zext(x) >= 0x100000001UL) == 0; } +int zext_geu_p(unsigned x) { return (zext(x) >= 0x100000000UL) == 0; } +int zext_geu_0(unsigned x) { return (zext(x) >= 0x0ffffffffUL) == (x >= 0xffffffff); } +int zext_geu_m(unsigned x) { return (zext(x) >= 0x0fffffffeUL) == (x >= 0xfffffffe); } + +int zext_gtu_q(unsigned x) { return (zext(x) > 0x100000001UL) == 0; } +int zext_gtu_p(unsigned x) { return (zext(x) > 0x100000000UL) == 0; } +int zext_gtu_0(unsigned x) { return (zext(x) > 0x0ffffffffUL) == 0; } +int zext_gtu_m(unsigned x) { return (zext(x) > 0x0fffffffeUL) == (x > 0xfffffffe); } + +/* + * check-name: cmp-zext-uimm2 + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-zext-zext.c b/validation/optim/cmp-zext-zext.c new file mode 100644 index 00000000..88f9078f --- /dev/null +++ b/validation/optim/cmp-zext-zext.c @@ -0,0 +1,17 @@ +#define T(TYPE) __##TYPE##_TYPE__ +#define cmp(TYPE, X, OP, Y) ((T(TYPE)) X OP (T(TYPE)) Y) +#define TEST(T1, T2, X, OP, Y) cmp(T1, X, OP, Y) == cmp(T2, X, OP, Y) + +#define ARGS(TYPE) T(TYPE) a, T(TYPE)b + +_Bool cmpe_zext_zext(ARGS(UINT32)) { return TEST(UINT64, UINT32, a, ==, b); } +_Bool cmps_zext_zext(ARGS(UINT32)) { return TEST( INT64, UINT32, a, < , b); } +_Bool cmpu_zext_zext(ARGS(UINT32)) { return TEST(UINT64, UINT32, a, < , b); } + +/* + * check-name: cmp-zext-zext + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/cmp-zext.c b/validation/optim/cmp-zext.c new file mode 100644 index 00000000..ac484780 --- /dev/null +++ b/validation/optim/cmp-zext.c @@ -0,0 +1,17 @@ +#define T(TYPE) __##TYPE##_TYPE__ +#define cmp(TYPE, X, OP, Y) ((T(TYPE)) X OP (T(TYPE)) Y) +#define TEST(T1, T2, X, OP, Y) cmp(T1, X, OP, Y) == cmp(T2, X, OP, Y) + +#define ARGS(TYPE) T(TYPE) a, T(TYPE)b + +_Bool cmpe_zext(ARGS(UINT32)) { return TEST(UINT64, UINT32, a, ==, 0xffffffff); } +_Bool cmps_zext(ARGS(UINT32)) { return TEST( INT64, UINT32, a, < , 0xffffffff); } +_Bool cmpu_zext(ARGS(UINT32)) { return TEST(UINT64, UINT32, a, < , 0xffffffff); } + +/* + * check-name: cmp-zext + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/set-uimm1.c b/validation/optim/set-uimm1.c new file mode 100644 index 00000000..aa9f54c3 --- /dev/null +++ b/validation/optim/set-uimm1.c @@ -0,0 +1,10 @@ +static _Bool setle_umax(unsigned int a) { return (a <= ~0) == 1; } +static _Bool setgt_umax(unsigned int a) { return (a > ~0) == 0; } + +/* + * check-name: set-uimm1 + * check-command: test-linearize $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/set-uimm2.c b/validation/optim/set-uimm2.c new file mode 100644 index 00000000..9138ae72 --- /dev/null +++ b/validation/optim/set-uimm2.c @@ -0,0 +1,12 @@ +static _Bool setlt_umax(unsigned int a) { return (a < ~0) == (a != ~0); } +static _Bool setle_umax(unsigned int a) { return (a <= ~1) == (a != ~0); } +static _Bool setge_umax(unsigned int a) { return (a >= ~0) == (a == ~0); } +static _Bool setgt_umax(unsigned int a) { return (a > ~1) == (a == ~0); } + +/* + * check-name: set-uimm2 + * check-command: test-linearize $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/set-uimm3.c b/validation/optim/set-uimm3.c new file mode 100644 index 00000000..5160f741 --- /dev/null +++ b/validation/optim/set-uimm3.c @@ -0,0 +1,10 @@ +int le(int x) { return (x <= 0x7fffffffU) == (x >= 0); } +int gt(int x) { return (x > 0x7fffffffU) == (x < 0); } + +/* + * check-name: set-uimm3 + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/optim/zext-cmpu.c b/validation/optim/zext-cmpu.c new file mode 100644 index 00000000..9758e071 --- /dev/null +++ b/validation/optim/zext-cmpu.c @@ -0,0 +1,16 @@ +int ltg(unsigned x) { return (((long long)x) < 0x100000000ULL) == 1; } +int ltl(unsigned x) { return (((long long)x) < 0x0ffffffffULL) == (x < 0xffffffffU); } +int leg(unsigned x) { return (((long long)x) <= 0x0ffffffffULL) == 1; } +int lel(unsigned x) { return (((long long)x) <= 0x0fffffffeULL) == (x <= 0xfffffffeU); } +int geg(unsigned x) { return (((long long)x) >= 0x100000000ULL) == 0; } +int gel(unsigned x) { return (((long long)x) >= 0x0ffffffffULL) == (x >= 0xffffffffU); } +int gtg(unsigned x) { return (((long long)x) > 0x0ffffffffULL) == 0; } +int gtl(unsigned x) { return (((long long)x) > 0x0fffffffeULL) == (x > 0xfffffffeU); } + +/* + * check-name: zext-cmpu + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-returns: 1 + */ |
