aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--simplify.c5
-rw-r--r--sparse-llvm.c4
-rw-r--r--validation/cast-kinds-check.c22
-rw-r--r--validation/cast-weirds.c35
-rw-r--r--validation/optim/cast-kinds.c (renamed from validation/linear/cast-kinds.c)24
-rw-r--r--validation/optim/cast-nop.c18
6 files changed, 45 insertions, 63 deletions
diff --git a/simplify.c b/simplify.c
index f8531043..1590b23c 100644
--- a/simplify.c
+++ b/simplify.c
@@ -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\\.
+ */