aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-04-02 11:09:47 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-01-08 14:04:43 +0100
commit030473b77d72bd6edcf9fb37e1fe8c12f96deab7 (patch)
treebe8cafa3e8305465959db2241244774586bc3632 /validation
parent1277d44553d34510a333632add6e75c759bd6dbd (diff)
downloadsparse-dev-030473b77d72bd6edcf9fb37e1fe8c12f96deab7.tar.gz
add OP_SETFVAL
OP_SETVAL is used to create floating-point and string as well as labels-as-values. This multi-purpose aspect sometimes make things a bit more complicated. Change this by using a new instruction for the direct creation of floating-point literals without needing to have an intermediate EXPR_FVALUE. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
-rw-r--r--validation/cast-constant-to-float.c6
-rw-r--r--validation/cast-constants.c20
-rw-r--r--validation/fp-ops.c2
-rw-r--r--validation/optim/bool-context-fp.c47
4 files changed, 61 insertions, 14 deletions
diff --git a/validation/cast-constant-to-float.c b/validation/cast-constant-to-float.c
index 86b7ac0f..ef7892f1 100644
--- a/validation/cast-constant-to-float.c
+++ b/validation/cast-constant-to-float.c
@@ -13,21 +13,21 @@ double f3(void) { return -1.0; }
f1:
.L0:
<entry-point>
- set.64 %r1 <- -1.000000
+ setfval.64 %r1 <- -1.000000
ret.64 %r1
f2:
.L2:
<entry-point>
- set.64 %r3 <- -1.000000
+ setfval.64 %r3 <- -1.000000
ret.64 %r3
f3:
.L4:
<entry-point>
- set.64 %r5 <- -1.000000
+ setfval.64 %r5 <- -1.000000
ret.64 %r5
diff --git a/validation/cast-constants.c b/validation/cast-constants.c
index f47d6fd3..9e200672 100644
--- a/validation/cast-constants.c
+++ b/validation/cast-constants.c
@@ -286,70 +286,70 @@ vptr_2_iptr:
int_2_float:
.L76:
<entry-point>
- set.32 %r39 <- 123.000000
+ setfval.32 %r39 <- 123.000000
ret.32 %r39
uint_2_float:
.L78:
<entry-point>
- set.32 %r41 <- 123.000000
+ setfval.32 %r41 <- 123.000000
ret.32 %r41
long_2_float:
.L80:
<entry-point>
- set.32 %r43 <- 123.000000
+ setfval.32 %r43 <- 123.000000
ret.32 %r43
ulong_2_float:
.L82:
<entry-point>
- set.32 %r45 <- 123.000000
+ setfval.32 %r45 <- 123.000000
ret.32 %r45
double_2_float:
.L84:
<entry-point>
- set.32 %r47 <- 1.123000
+ setfval.32 %r47 <- 1.123000
ret.32 %r47
int_2_double:
.L86:
<entry-point>
- set.64 %r49 <- 123.000000
+ setfval.64 %r49 <- 123.000000
ret.64 %r49
uint_2_double:
.L88:
<entry-point>
- set.64 %r51 <- 123.000000
+ setfval.64 %r51 <- 123.000000
ret.64 %r51
long_2_double:
.L90:
<entry-point>
- set.64 %r53 <- 123.000000
+ setfval.64 %r53 <- 123.000000
ret.64 %r53
ulong_2_double:
.L92:
<entry-point>
- set.64 %r55 <- 123.000000
+ setfval.64 %r55 <- 123.000000
ret.64 %r55
float_2_double:
.L94:
<entry-point>
- set.64 %r57 <- 1.123000
+ setfval.64 %r57 <- 1.123000
ret.64 %r57
diff --git a/validation/fp-ops.c b/validation/fp-ops.c
index 71cb9848..81f73384 100644
--- a/validation/fp-ops.c
+++ b/validation/fp-ops.c
@@ -48,7 +48,7 @@ fneg:
ftst:
.L10:
<entry-point>
- set.64 %r21 <- 0.000000
+ setfval.64 %r21 <- 0.000000
fcmpoeq.1 %r23 <- %arg1, %r21
ret.1 %r23
diff --git a/validation/optim/bool-context-fp.c b/validation/optim/bool-context-fp.c
new file mode 100644
index 00000000..ad075c56
--- /dev/null
+++ b/validation/optim/bool-context-fp.c
@@ -0,0 +1,47 @@
+#define bool _Bool
+
+bool bfimp(float a) { return a; }
+bool bfexp(float a) { return (bool)a; }
+
+bool bfnot(float a) { return !a; }
+int ifnot(float a) { return !a; }
+
+/*
+ * check-name: bool context fp
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+bfimp:
+.L0:
+ <entry-point>
+ setfval.32 %r2 <- 0.000000
+ fcmpune.1 %r3 <- %arg1, %r2
+ ret.1 %r3
+
+
+bfexp:
+.L2:
+ <entry-point>
+ setfval.32 %r6 <- 0.000000
+ fcmpune.1 %r7 <- %arg1, %r6
+ ret.1 %r7
+
+
+bfnot:
+.L4:
+ <entry-point>
+ setfval.32 %r10 <- 0.000000
+ fcmpoeq.1 %r12 <- %arg1, %r10
+ ret.1 %r12
+
+
+ifnot:
+.L6:
+ <entry-point>
+ setfval.32 %r15 <- 0.000000
+ fcmpoeq.32 %r16 <- %arg1, %r15
+ ret.32 %r16
+
+
+ * check-output-end
+ */