aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-08-14 15:05:24 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-06-23 07:46:40 +0200
commit52856c815a191b73530557133bd44ec478f3fece (patch)
tree453cf39d9723ab4435b4d7b871317b502d4e8058 /validation
parent55cac5336b14524ebc371bcee006e2b497d84c5f (diff)
downloadsparse-dev-52856c815a191b73530557133bd44ec478f3fece.tar.gz
cast: specialize floats to integer conversion
Currently, casts from floats to integers are processed like integers (or any other type) to integers. This is simple but rather unconvenient as it correspond to different operations that obeys to different rules and which later need extra checks. Change this by directly using specific instructions: - FCVTU for floats to unsigned integers - FCVTS for floats to signed integers Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
-rw-r--r--validation/cast-kinds-check.c3
-rw-r--r--validation/linear/bool-cast.c1
-rw-r--r--validation/linear/cast-kinds.c16
-rw-r--r--validation/linear/fp2i-cast.c3
-rw-r--r--validation/optim/kill-casts.c1
5 files changed, 12 insertions, 12 deletions
diff --git a/validation/cast-kinds-check.c b/validation/cast-kinds-check.c
index b8e94840..1f10e0ec 100644
--- a/validation/cast-kinds-check.c
+++ b/validation/cast-kinds-check.c
@@ -3,19 +3,16 @@
/*
* check-name: cast-kinds check
* check-command: sparse -m64 -v $file
- * check-known-to-fail
*
* 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:10:49: 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:17:52: warning: cast drops bits
linear/cast-kinds.c:21:49: warning: cast wasn't removed
linear/cast-kinds.c:22:48: warning: cast wasn't removed
linear/cast-kinds.c:28:52: warning: cast wasn't removed
diff --git a/validation/linear/bool-cast.c b/validation/linear/bool-cast.c
index 981e9f83..094f4438 100644
--- a/validation/linear/bool-cast.c
+++ b/validation/linear/bool-cast.c
@@ -27,6 +27,7 @@ static _Bool fdbl_e(dbl a) { return (_Bool)a; }
*
* check-output-ignore
* check-output-excludes: cast\\.
+ * check-output-excludes: fcvt[us]\\.
* check-output-pattern(12): setne\\.
* check-output-pattern(2): fcmpune\\.
*/
diff --git a/validation/linear/cast-kinds.c b/validation/linear/cast-kinds.c
index 5944610c..d07a9419 100644
--- a/validation/linear/cast-kinds.c
+++ b/validation/linear/cast-kinds.c
@@ -95,14 +95,14 @@ iptr_2_int:
float_2_int:
.L10:
<entry-point>
- cast.32 %r17 <- (32) %arg1
+ fcvts.32 %r17 <- (32) %arg1
ret.32 %r17
double_2_int:
.L12:
<entry-point>
- cast.32 %r20 <- (64) %arg1
+ fcvts.32 %r20 <- (64) %arg1
ret.32 %r20
@@ -143,14 +143,14 @@ iptr_2_uint:
float_2_uint:
.L24:
<entry-point>
- cast.32 %r38 <- (32) %arg1
+ fcvtu.32 %r38 <- (32) %arg1
ret.32 %r38
double_2_uint:
.L26:
<entry-point>
- cast.32 %r41 <- (64) %arg1
+ fcvtu.32 %r41 <- (64) %arg1
ret.32 %r41
@@ -191,14 +191,14 @@ iptr_2_long:
float_2_long:
.L38:
<entry-point>
- cast.64 %r59 <- (32) %arg1
+ fcvts.64 %r59 <- (32) %arg1
ret.64 %r59
double_2_long:
.L40:
<entry-point>
- cast.64 %r62 <- (64) %arg1
+ fcvts.64 %r62 <- (64) %arg1
ret.64 %r62
@@ -239,14 +239,14 @@ iptr_2_ulong:
float_2_ulong:
.L52:
<entry-point>
- cast.64 %r80 <- (32) %arg1
+ fcvtu.64 %r80 <- (32) %arg1
ret.64 %r80
double_2_ulong:
.L54:
<entry-point>
- cast.64 %r83 <- (64) %arg1
+ fcvtu.64 %r83 <- (64) %arg1
ret.64 %r83
diff --git a/validation/linear/fp2i-cast.c b/validation/linear/fp2i-cast.c
index 98d7453e..c85c4ccd 100644
--- a/validation/linear/fp2i-cast.c
+++ b/validation/linear/fp2i-cast.c
@@ -26,5 +26,6 @@ ul d2ul(double a) { return a; }
* check-command: test-linearize -Wno-decl $file
*
* check-output-ignore
- * check-output-pattern(8): cast\\.
+ * check-output-pattern(4): fcvts\\.
+ * check-output-pattern(4): fcvtu\\.
*/
diff --git a/validation/optim/kill-casts.c b/validation/optim/kill-casts.c
index cf52f246..b79335ab 100644
--- a/validation/optim/kill-casts.c
+++ b/validation/optim/kill-casts.c
@@ -19,4 +19,5 @@ void foo(struct s *x)
*
* check-output-ignore
* check-output-excludes: cast\\.
+ * check-output-excludes: fcvt[us]\\.
*/