diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-08-15 11:24:01 +0200 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-06-23 07:46:40 +0200 |
| commit | 01951278a60490735677920c86f139d627b22dbf (patch) | |
| tree | 44e9168eacaf2053a4b96bc52a4fb38b288e07a2 /validation/optim | |
| parent | bf21036518acf0c3069c9c9e12b13fd09c8cdceb (diff) | |
| download | sparse-dev-01951278a60490735677920c86f139d627b22dbf.tar.gz | |
cast: specialize integer casts
Casts to integer used to be done with only 2 instructions:
OP_CAST & OP_SCAST.
Those are not very convenient as they don't reflect the real
operations that need to be done.
This patch specialize these instructions in:
- OP_TRUNC, for casts to a smaller type
- OP_ZEXT, for casts that need a zero extension
- OP_SEXT, for casts that need a sign extension
- Integer-to-integer casts of the same size are considered as
a NOPs and are, in fact, never emitted.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation/optim')
| -rw-r--r-- | validation/optim/bool-simplify.c | 4 | ||||
| -rw-r--r-- | validation/optim/canonical-cmp.c | 72 | ||||
| -rw-r--r-- | validation/optim/kill-casts.c | 2 |
3 files changed, 40 insertions, 38 deletions
diff --git a/validation/optim/bool-simplify.c b/validation/optim/bool-simplify.c index 05be1149..5b3cf449 100644 --- a/validation/optim/bool-simplify.c +++ b/validation/optim/bool-simplify.c @@ -33,7 +33,7 @@ and_1: .L2: <entry-point> setne.1 %r8 <- %arg1, $0 - cast.32 %r11 <- (1) %r8 + zext.32 %r11 <- (1) %r8 ret.32 %r11 @@ -41,7 +41,7 @@ or_0: .L4: <entry-point> setne.1 %r14 <- %arg1, $0 - cast.32 %r17 <- (1) %r14 + zext.32 %r17 <- (1) %r14 ret.32 %r17 diff --git a/validation/optim/canonical-cmp.c b/validation/optim/canonical-cmp.c index 0fc531e9..e0ca7db3 100644 --- a/validation/optim/canonical-cmp.c +++ b/validation/optim/canonical-cmp.c @@ -27,97 +27,97 @@ uint uat(uint p, uint a) { return (123 < p) ? a : 0; } seq: .L0: <entry-point> - seteq.32 %r4 <- %arg1, $123 - select.32 %r5 <- %r4, %arg2, $0 - ret.32 %r5 + seteq.32 %r3 <- %arg1, $123 + select.32 %r4 <- %r3, %arg2, $0 + ret.32 %r4 sne: .L2: <entry-point> - setne.32 %r11 <- %arg1, $123 - select.32 %r12 <- %r11, %arg2, $0 - ret.32 %r12 + setne.32 %r8 <- %arg1, $123 + select.32 %r9 <- %r8, %arg2, $0 + ret.32 %r9 slt: .L4: <entry-point> - setlt.32 %r18 <- %arg1, $123 - select.32 %r19 <- %r18, %arg2, $0 - ret.32 %r19 + setlt.32 %r13 <- %arg1, $123 + select.32 %r14 <- %r13, %arg2, $0 + ret.32 %r14 sle: .L6: <entry-point> - setle.32 %r25 <- %arg1, $123 - select.32 %r26 <- %r25, %arg2, $0 - ret.32 %r26 + setle.32 %r18 <- %arg1, $123 + select.32 %r19 <- %r18, %arg2, $0 + ret.32 %r19 sge: .L8: <entry-point> - setge.32 %r32 <- %arg1, $123 - select.32 %r33 <- %r32, %arg2, $0 - ret.32 %r33 + setge.32 %r23 <- %arg1, $123 + select.32 %r24 <- %r23, %arg2, $0 + ret.32 %r24 sgt: .L10: <entry-point> - setgt.32 %r39 <- %arg1, $123 - select.32 %r40 <- %r39, %arg2, $0 - ret.32 %r40 + setgt.32 %r28 <- %arg1, $123 + select.32 %r29 <- %r28, %arg2, $0 + ret.32 %r29 ueq: .L12: <entry-point> - seteq.32 %r45 <- %arg1, $123 - select.32 %r46 <- %r45, %arg2, $0 - ret.32 %r46 + seteq.32 %r33 <- %arg1, $123 + select.32 %r34 <- %r33, %arg2, $0 + ret.32 %r34 une: .L14: <entry-point> - setne.32 %r50 <- %arg1, $123 - select.32 %r51 <- %r50, %arg2, $0 - ret.32 %r51 + setne.32 %r38 <- %arg1, $123 + select.32 %r39 <- %r38, %arg2, $0 + ret.32 %r39 ubt: .L16: <entry-point> - setb.32 %r55 <- %arg1, $123 - select.32 %r56 <- %r55, %arg2, $0 - ret.32 %r56 + setb.32 %r43 <- %arg1, $123 + select.32 %r44 <- %r43, %arg2, $0 + ret.32 %r44 ube: .L18: <entry-point> - setbe.32 %r60 <- %arg1, $123 - select.32 %r61 <- %r60, %arg2, $0 - ret.32 %r61 + setbe.32 %r48 <- %arg1, $123 + select.32 %r49 <- %r48, %arg2, $0 + ret.32 %r49 uae: .L20: <entry-point> - setae.32 %r65 <- %arg1, $123 - select.32 %r66 <- %r65, %arg2, $0 - ret.32 %r66 + setae.32 %r53 <- %arg1, $123 + select.32 %r54 <- %r53, %arg2, $0 + ret.32 %r54 uat: .L22: <entry-point> - seta.32 %r70 <- %arg1, $123 - select.32 %r71 <- %r70, %arg2, $0 - ret.32 %r71 + seta.32 %r58 <- %arg1, $123 + select.32 %r59 <- %r58, %arg2, $0 + ret.32 %r59 * check-output-end diff --git a/validation/optim/kill-casts.c b/validation/optim/kill-casts.c index 140b8d20..2aa53fda 100644 --- a/validation/optim/kill-casts.c +++ b/validation/optim/kill-casts.c @@ -22,4 +22,6 @@ void foo(struct s *x) * check-output-excludes: fcvt[us]\\. * check-output-excludes: utptr\\. * check-output-excludes: ptrtu\\. + * check-output-excludes: [sz]ext\\. + * check-output-excludes: trunc\\. */ |
