diff options
| -rw-r--r-- | simplify.c | 5 | ||||
| -rw-r--r-- | sparse-llvm.c | 4 | ||||
| -rw-r--r-- | validation/cast-kinds-check.c | 22 | ||||
| -rw-r--r-- | validation/cast-weirds.c | 35 | ||||
| -rw-r--r-- | validation/optim/cast-kinds.c (renamed from validation/linear/cast-kinds.c) | 24 | ||||
| -rw-r--r-- | validation/optim/cast-nop.c | 18 |
6 files changed, 45 insertions, 63 deletions
@@ -1215,12 +1215,13 @@ int simplify_instruction(struct instruction *insn) case OP_FCVTU: case OP_FCVTS: case OP_UCVTF: case OP_SCVTF: case OP_FCVTF: - case OP_UTPTR: - case OP_PTRTU: case OP_PTRCAST: if (dead_insn(insn, &insn->src, NULL, NULL)) return REPEAT_CSE; break; + case OP_UTPTR: + case OP_PTRTU: + return replace_with_pseudo(insn, insn->src); case OP_PHI: if (dead_insn(insn, NULL, NULL, NULL)) { kill_use_list(insn->phi_list); diff --git a/sparse-llvm.c b/sparse-llvm.c index d28eb6e7..58811309 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -636,6 +636,10 @@ static void output_op_compare(struct function *fn, struct instruction *insn) case LLVMIntegerTypeKind: { LLVMIntPredicate op = translate_op(insn->opcode); + if (LLVMGetTypeKind(LLVMTypeOf(rhs)) == LLVMPointerTypeKind) { + LLVMTypeRef ltype = LLVMTypeOf(lhs); + rhs = LLVMBuildPtrToInt(fn->builder, rhs, ltype, ""); + } target = LLVMBuildICmp(fn->builder, op, lhs, rhs, target_name); break; } diff --git a/validation/cast-kinds-check.c b/validation/cast-kinds-check.c index 0fe705f5..b50ddd24 100644 --- a/validation/cast-kinds-check.c +++ b/validation/cast-kinds-check.c @@ -1,19 +1,19 @@ -#include "linear/cast-kinds.c" +#include "optim/cast-kinds.c" /* * check-name: cast-kinds check * check-command: sparse -m64 -v -Wno-pointer-to-int-cast $file * * check-error-start -linear/cast-kinds.c:5:45: warning: cast drops bits -linear/cast-kinds.c:6:47: warning: cast drops bits -linear/cast-kinds.c:7:46: warning: cast drops bits -linear/cast-kinds.c:8:45: warning: cast drops bits -linear/cast-kinds.c:12:48: warning: cast drops bits -linear/cast-kinds.c:13:50: warning: cast drops bits -linear/cast-kinds.c:14:49: warning: cast drops bits -linear/cast-kinds.c:15:48: warning: cast drops bits -linear/cast-kinds.c:37:42: warning: non size-preserving integer to pointer cast -linear/cast-kinds.c:38:44: warning: non size-preserving integer to pointer cast +optim/cast-kinds.c:5:45: warning: cast drops bits +optim/cast-kinds.c:6:47: warning: cast drops bits +optim/cast-kinds.c:7:46: warning: cast drops bits +optim/cast-kinds.c:8:45: warning: cast drops bits +optim/cast-kinds.c:12:48: warning: cast drops bits +optim/cast-kinds.c:13:50: warning: cast drops bits +optim/cast-kinds.c:14:49: warning: cast drops bits +optim/cast-kinds.c:15:48: warning: cast drops bits +optim/cast-kinds.c:37:42: warning: non size-preserving integer to pointer cast +optim/cast-kinds.c:38:44: warning: non size-preserving integer to pointer cast * check-error-end */ diff --git a/validation/cast-weirds.c b/validation/cast-weirds.c index a99c65d2..01ccc473 100644 --- a/validation/cast-weirds.c +++ b/validation/cast-weirds.c @@ -9,43 +9,10 @@ static void * uint_2_vptr(uint a) { return (void *)a; } /* * check-name: cast-weirds - * check-command: test-linearize -m64 $file + * check-command: sparse -m64 $file * * check-error-start cast-weirds.c:4:42: warning: non size-preserving integer to pointer cast cast-weirds.c:5:44: warning: non size-preserving integer to pointer cast * check-error-end - * - * check-output-start -int_2_iptr: -.L0: - <entry-point> - sext.64 %r2 <- (32) %arg1 - utptr.64 %r3 <- (64) %r2 - ret.64 %r3 - - -uint_2_iptr: -.L2: - <entry-point> - zext.64 %r6 <- (32) %arg1 - utptr.64 %r7 <- (64) %r6 - ret.64 %r7 - - -int_2_vptr: -.L4: - <entry-point> - sext.64 %r10 <- (32) %arg1 - ret.64 %r10 - - -uint_2_vptr: -.L6: - <entry-point> - zext.64 %r13 <- (32) %arg1 - ret.64 %r13 - - - * check-output-end */ diff --git a/validation/linear/cast-kinds.c b/validation/optim/cast-kinds.c index 5df307bc..b144dc7e 100644 --- a/validation/linear/cast-kinds.c +++ b/validation/optim/cast-kinds.c @@ -88,8 +88,7 @@ vptr_2_int: iptr_2_int: .L8: <entry-point> - ptrtu.64 %r13 <- (64) %arg1 - trunc.32 %r14 <- (64) %r13 + trunc.32 %r14 <- (64) %arg1 ret.32 %r14 @@ -137,8 +136,7 @@ vptr_2_uint: iptr_2_uint: .L22: <entry-point> - ptrtu.64 %r34 <- (64) %arg1 - trunc.32 %r35 <- (64) %r34 + trunc.32 %r35 <- (64) %arg1 ret.32 %r35 @@ -185,8 +183,7 @@ vptr_2_long: iptr_2_long: .L36: <entry-point> - ptrtu.64 %r54 <- (64) %arg1 - ret.64 %r54 + ret.64 %arg1 float_2_long: @@ -232,8 +229,7 @@ vptr_2_ulong: iptr_2_ulong: .L50: <entry-point> - ptrtu.64 %r73 <- (64) %arg1 - ret.64 %r73 + ret.64 %arg1 float_2_ulong: @@ -286,30 +282,26 @@ int_2_iptr: .L66: <entry-point> sext.64 %r94 <- (32) %arg1 - utptr.64 %r95 <- (64) %r94 - ret.64 %r95 + ret.64 %r94 uint_2_iptr: .L68: <entry-point> zext.64 %r98 <- (32) %arg1 - utptr.64 %r99 <- (64) %r98 - ret.64 %r99 + ret.64 %r98 long_2_iptr: .L70: <entry-point> - utptr.64 %r102 <- (64) %arg1 - ret.64 %r102 + ret.64 %arg1 ulong_2_iptr: .L72: <entry-point> - utptr.64 %r105 <- (64) %arg1 - ret.64 %r105 + ret.64 %arg1 vptr_2_iptr: diff --git a/validation/optim/cast-nop.c b/validation/optim/cast-nop.c new file mode 100644 index 00000000..7741b7a7 --- /dev/null +++ b/validation/optim/cast-nop.c @@ -0,0 +1,18 @@ +static long p2l(long *p) +{ + return (long) p; +} + +static long *l2p(long l) +{ + return (long*)l; +} + +/* + * check-name: cast-nop + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-excludes: utptr\\. + * check-output-excludes: ptrtu\\. + */ |
