[PATCH 01/13] add testcase for linearize_logical()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add some tests in preparation of some bug-fixing and
simplification in linearize_logical()linearize_conditional().

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
---
 validation/linear/logical.c     | 300 ++++++++++++++++++++++++++++++++
 validation/optim/mask1-setne0.c |  29 +++
 validation/optim/setcc-mask.c   |  19 ++
 validation/optim/setne0-sext.c  |  10 ++
 validation/optim/setne0-trunc.c |  10 ++
 validation/optim/setne0-zext.c  |  10 ++
 validation/optim/trunc-seteq0.c |  19 ++
 validation/optim/trunc-setne0.c |  21 +++
 8 files changed, 418 insertions(+)
 create mode 100644 validation/linear/logical.c
 create mode 100644 validation/optim/mask1-setne0.c
 create mode 100644 validation/optim/setcc-mask.c
 create mode 100644 validation/optim/setne0-sext.c
 create mode 100644 validation/optim/setne0-trunc.c
 create mode 100644 validation/optim/setne0-zext.c
 create mode 100644 validation/optim/trunc-seteq0.c
 create mode 100644 validation/optim/trunc-setne0.c

diff --git a/validation/linear/logical.c b/validation/linear/logical.c
new file mode 100644
index 000000000..645adc565
--- /dev/null
+++ b/validation/linear/logical.c
@@ -0,0 +1,300 @@
+struct S {
+	         int  :1;
+	  signed int s:2;
+	unsigned int u:3;
+	        long l;
+	      double d;
+};
+
+int os(int i, struct S *b) { return i || b->s; }
+int ou(int i, struct S *b) { return i || b->u; }
+int ol(int i, struct S *b) { return i || b->l; }
+int od(int i, struct S *b) { return i || b->d; }
+
+int as(int i, struct S *b) { return i && b->s; }
+int au(int i, struct S *b) { return i && b->u; }
+int al(int i, struct S *b) { return i && b->l; }
+int ad(int i, struct S *b) { return i && b->d; }
+
+/*
+ * check-name: logical
+ * check-command: test-linearize -m64 -fdump-ir -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+os:
+.L0:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r1 <- 0[i]
+	setne.1     %r2 <- %r1, $0
+	cbr         %r2, .L2, .L3
+
+.L2:
+	setne.1     %r3 <- $1, $0
+	zext.32     %r4 <- (1) %r3
+	phisrc.32   %phi1 <- %r4
+	br          .L4
+
+.L3:
+	load.64     %r5 <- 0[b]
+	load.32     %r6 <- 0[%r5]
+	lsr.32      %r7 <- %r6, $1
+	trunc.2     %r8 <- (32) %r7
+	setne.1     %r9 <- %r8, $0
+	zext.32     %r10 <- (1) %r9
+	phisrc.32   %phi2 <- %r10
+	br          .L4
+
+.L4:
+	phi.32      %r11 <- %phi1, %phi2
+	phisrc.32   %phi3(return) <- %r11
+	br          .L1
+
+.L1:
+	phi.32      %r12 <- %phi3(return)
+	ret.32      %r12
+
+
+ou:
+.L5:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r13 <- 0[i]
+	setne.1     %r14 <- %r13, $0
+	cbr         %r14, .L7, .L8
+
+.L7:
+	setne.1     %r15 <- $1, $0
+	zext.32     %r16 <- (1) %r15
+	phisrc.32   %phi5 <- %r16
+	br          .L9
+
+.L8:
+	load.64     %r17 <- 0[b]
+	load.32     %r18 <- 0[%r17]
+	lsr.32      %r19 <- %r18, $3
+	trunc.3     %r20 <- (32) %r19
+	setne.1     %r21 <- %r20, $0
+	zext.32     %r22 <- (1) %r21
+	phisrc.32   %phi6 <- %r22
+	br          .L9
+
+.L9:
+	phi.32      %r23 <- %phi5, %phi6
+	phisrc.32   %phi7(return) <- %r23
+	br          .L6
+
+.L6:
+	phi.32      %r24 <- %phi7(return)
+	ret.32      %r24
+
+
+ol:
+.L10:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r25 <- 0[i]
+	setne.1     %r26 <- %r25, $0
+	cbr         %r26, .L12, .L13
+
+.L12:
+	setne.1     %r27 <- $1, $0
+	zext.32     %r28 <- (1) %r27
+	phisrc.32   %phi9 <- %r28
+	br          .L14
+
+.L13:
+	load.64     %r29 <- 0[b]
+	load.64     %r30 <- 8[%r29]
+	setne.1     %r31 <- %r30, $0
+	zext.32     %r32 <- (1) %r31
+	phisrc.32   %phi10 <- %r32
+	br          .L14
+
+.L14:
+	phi.32      %r33 <- %phi9, %phi10
+	phisrc.32   %phi11(return) <- %r33
+	br          .L11
+
+.L11:
+	phi.32      %r34 <- %phi11(return)
+	ret.32      %r34
+
+
+od:
+.L15:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r35 <- 0[i]
+	setne.1     %r36 <- %r35, $0
+	cbr         %r36, .L17, .L18
+
+.L17:
+	setne.1     %r37 <- $1, $0
+	zext.32     %r38 <- (1) %r37
+	phisrc.32   %phi13 <- %r38
+	br          .L19
+
+.L18:
+	load.64     %r39 <- 0[b]
+	load.64     %r40 <- 16[%r39]
+	setfval.64  %r41 <- 0.000000e+00
+	fcmpune.1   %r42 <- %r40, %r41
+	zext.32     %r43 <- (1) %r42
+	phisrc.32   %phi14 <- %r43
+	br          .L19
+
+.L19:
+	phi.32      %r44 <- %phi13, %phi14
+	phisrc.32   %phi15(return) <- %r44
+	br          .L16
+
+.L16:
+	phi.32      %r45 <- %phi15(return)
+	ret.32      %r45
+
+
+as:
+.L20:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r46 <- 0[i]
+	setne.1     %r47 <- %r46, $0
+	cbr         %r47, .L22, .L23
+
+.L22:
+	load.64     %r48 <- 0[b]
+	load.32     %r49 <- 0[%r48]
+	lsr.32      %r50 <- %r49, $1
+	trunc.2     %r51 <- (32) %r50
+	setne.1     %r52 <- %r51, $0
+	zext.32     %r53 <- (1) %r52
+	phisrc.32   %phi17 <- %r53
+	br          .L24
+
+.L23:
+	setne.1     %r54 <- $0, $0
+	zext.32     %r55 <- (1) %r54
+	phisrc.32   %phi18 <- %r55
+	br          .L24
+
+.L24:
+	phi.32      %r56 <- %phi17, %phi18
+	phisrc.32   %phi19(return) <- %r56
+	br          .L21
+
+.L21:
+	phi.32      %r57 <- %phi19(return)
+	ret.32      %r57
+
+
+au:
+.L25:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r58 <- 0[i]
+	setne.1     %r59 <- %r58, $0
+	cbr         %r59, .L27, .L28
+
+.L27:
+	load.64     %r60 <- 0[b]
+	load.32     %r61 <- 0[%r60]
+	lsr.32      %r62 <- %r61, $3
+	trunc.3     %r63 <- (32) %r62
+	setne.1     %r64 <- %r63, $0
+	zext.32     %r65 <- (1) %r64
+	phisrc.32   %phi21 <- %r65
+	br          .L29
+
+.L28:
+	setne.1     %r66 <- $0, $0
+	zext.32     %r67 <- (1) %r66
+	phisrc.32   %phi22 <- %r67
+	br          .L29
+
+.L29:
+	phi.32      %r68 <- %phi21, %phi22
+	phisrc.32   %phi23(return) <- %r68
+	br          .L26
+
+.L26:
+	phi.32      %r69 <- %phi23(return)
+	ret.32      %r69
+
+
+al:
+.L30:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r70 <- 0[i]
+	setne.1     %r71 <- %r70, $0
+	cbr         %r71, .L32, .L33
+
+.L32:
+	load.64     %r72 <- 0[b]
+	load.64     %r73 <- 8[%r72]
+	setne.1     %r74 <- %r73, $0
+	zext.32     %r75 <- (1) %r74
+	phisrc.32   %phi25 <- %r75
+	br          .L34
+
+.L33:
+	setne.1     %r76 <- $0, $0
+	zext.32     %r77 <- (1) %r76
+	phisrc.32   %phi26 <- %r77
+	br          .L34
+
+.L34:
+	phi.32      %r78 <- %phi25, %phi26
+	phisrc.32   %phi27(return) <- %r78
+	br          .L31
+
+.L31:
+	phi.32      %r79 <- %phi27(return)
+	ret.32      %r79
+
+
+ad:
+.L35:
+	<entry-point>
+	store.32    %arg1 -> 0[i]
+	store.64    %arg2 -> 0[b]
+	load.32     %r80 <- 0[i]
+	setne.1     %r81 <- %r80, $0
+	cbr         %r81, .L37, .L38
+
+.L37:
+	load.64     %r82 <- 0[b]
+	load.64     %r83 <- 16[%r82]
+	setfval.64  %r84 <- 0.000000e+00
+	fcmpune.1   %r85 <- %r83, %r84
+	zext.32     %r86 <- (1) %r85
+	phisrc.32   %phi29 <- %r86
+	br          .L39
+
+.L38:
+	setne.1     %r87 <- $0, $0
+	zext.32     %r88 <- (1) %r87
+	phisrc.32   %phi30 <- %r88
+	br          .L39
+
+.L39:
+	phi.32      %r89 <- %phi29, %phi30
+	phisrc.32   %phi31(return) <- %r89
+	br          .L36
+
+.L36:
+	phi.32      %r90 <- %phi31(return)
+	ret.32      %r90
+
+
+ * check-output-end
+ */
diff --git a/validation/optim/mask1-setne0.c b/validation/optim/mask1-setne0.c
new file mode 100644
index 000000000..8810189cd
--- /dev/null
+++ b/validation/optim/mask1-setne0.c
@@ -0,0 +1,29 @@
+struct s {
+	unsigned i:1;
+};
+
+int foo(struct s x)
+{
+	unsigned int i = x.i;
+
+	if (i == 0)
+		return 1;
+	else if (i == 1)
+		return 1;
+	return 0;
+}
+
+/*
+ * check-name: mask1-setne0
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+foo:
+.L0:
+	<entry-point>
+	ret.32      $1
+
+
+ * check-output-end
+ */
diff --git a/validation/optim/setcc-mask.c b/validation/optim/setcc-mask.c
new file mode 100644
index 000000000..c8df10494
--- /dev/null
+++ b/validation/optim/setcc-mask.c
@@ -0,0 +1,19 @@
+int foo (int a)
+{
+	return ((a == 0) & 1) == (a == 0);
+}
+
+/*
+ * check-name: setcc-mask
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+foo:
+.L0:
+	<entry-point>
+	ret.32      $1
+
+
+ * check-output-end
+ */
diff --git a/validation/optim/setne0-sext.c b/validation/optim/setne0-sext.c
new file mode 100644
index 000000000..565f8df24
--- /dev/null
+++ b/validation/optim/setne0-sext.c
@@ -0,0 +1,10 @@
+long foo(int a) { return a != 0; }
+
+/*
+ * check-name: setne0-sext
+ * check-command: test-linearize -m64 -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-excludes: sext\\.
+ */
diff --git a/validation/optim/setne0-trunc.c b/validation/optim/setne0-trunc.c
new file mode 100644
index 000000000..621314100
--- /dev/null
+++ b/validation/optim/setne0-trunc.c
@@ -0,0 +1,10 @@
+char foo(int a) { return a != 0; }
+
+/*
+ * check-name: setne0-trunc
+ * check-command: test-linearize -m64 -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-excludes: trunc\\.
+ */
diff --git a/validation/optim/setne0-zext.c b/validation/optim/setne0-zext.c
new file mode 100644
index 000000000..fc6615bec
--- /dev/null
+++ b/validation/optim/setne0-zext.c
@@ -0,0 +1,10 @@
+unsigned long foo(int a) { return (unsigned int) (a != 0); }
+
+/*
+ * check-name: setne0-zext
+ * check-command: test-linearize -m64 -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-excludes: zext\\.
+ */
diff --git a/validation/optim/trunc-seteq0.c b/validation/optim/trunc-seteq0.c
new file mode 100644
index 000000000..321c045e3
--- /dev/null
+++ b/validation/optim/trunc-seteq0.c
@@ -0,0 +1,19 @@
+struct S {
+	         int  :1;
+	  signed int s:2;
+	unsigned int u:3;
+};
+
+int os(int i, struct S *b) { return i || b->s; }
+int ou(int i, struct S *b) { return i || b->u; }
+
+/*
+ * check-name: trunc-seteq0
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-excludes: trunc\\.
+ * check-output-excludes: sext\\.
+ * check-output-excludes: zext\\.
+ */
diff --git a/validation/optim/trunc-setne0.c b/validation/optim/trunc-setne0.c
new file mode 100644
index 000000000..16f99a88c
--- /dev/null
+++ b/validation/optim/trunc-setne0.c
@@ -0,0 +1,21 @@
+struct s {
+	unsigned int u:1;
+};
+
+unsigned int foo(struct s x)
+{
+	if (x.u)
+		return 1;
+	else
+		return 0;
+}
+
+/*
+ * check-name: trunc-setne0
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-contains: and\\.
+ * check-output-excludes: trunc\\.
+ */
-- 
2.18.0

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux