projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
53b4de2
)
doxygen docu improved
author
Michael Beck
<beck@ipd.info.uni-karlsruhe.de>
Tue, 13 Jun 2006 16:53:30 +0000
(16:53 +0000)
committer
Michael Beck
<beck@ipd.info.uni-karlsruhe.de>
Tue, 13 Jun 2006 16:53:30 +0000
(16:53 +0000)
[r7927]
ir/opt/opt_osr.h
patch
|
blob
|
history
diff --git
a/ir/opt/opt_osr.h
b/ir/opt/opt_osr.h
index
cabcdab
..
2454858
100644
(file)
--- a/
ir/opt/opt_osr.h
+++ b/
ir/opt/opt_osr.h
@@
-18,8
+18,8
@@
/** Possible flags for the Operator Scalar Replacement. */
typedef enum osr_flags {
osr_flag_none = 0, /**< no additional flags */
/** Possible flags for the Operator Scalar Replacement. */
typedef enum osr_flags {
osr_flag_none = 0, /**< no additional flags */
- osr_flag_lftr_with_ov_check = 1, /**< do
only
linear function test replacement
-
if no overflow occurs
. */
+ osr_flag_lftr_with_ov_check = 1, /**< do linear function test replacement
+
only if no overflow can occur
. */
} osr_flags;
/* FirmJNI cannot handle identical enum values... */
} osr_flags;
/* FirmJNI cannot handle identical enum values... */
@@
-37,7
+37,7
@@
typedef enum osr_flags {
* The linear function replacement test is controlled by the flags.
* If the osr_flag_lftr_with_ov_check is set, the replacement is only
* done if do overflow can occur.
* The linear function replacement test is controlled by the flags.
* If the osr_flag_lftr_with_ov_check is set, the replacement is only
* done if do overflow can occur.
- * Otherwise it is ALWAYS done which might be
uns
ure.
+ * Otherwise it is ALWAYS done which might be
insec
ure.
*
* For instance:
*
*
* For instance:
*
@@
-57,8
+57,31
@@
typedef enum osr_flags {
*
* because of overflow.
*
*
* because of overflow.
*
+ * More bad cases:
+ *
+ * for (i = 0; i <= 0xF; ++i)
+ *
+ * will NOT be transformed into
+ *
+ * for (i = 0xFFFFFFF0; i <= 0xFFFFFFFF; ++i)
+ *
+ * although here is no direct overflow. The OV occurs when the ++i
+ * is executed (and would created an endless loop here!).
+ *
+ * For the same reason, a loop
+ *
+ * for (i = 0; i <= 9; i += x)
+ *
+ * will NOT be transformed because we cannot estimate whether an overflow
+ * might happen adding x.
+ *
* Note that i < a + 400 is also not possible with the current implementation
* although this might be allowed by other compilers...
* Note that i < a + 400 is also not possible with the current implementation
* although this might be allowed by other compilers...
+ *
+ * Note further that tests for equality can be handled some simplier (but are not
+ * implemented yet).
+ *
+ * This algorithm destoyes the link field of nodes.
*/
void opt_osr(ir_graph *irg, unsigned flags);
*/
void opt_osr(ir_graph *irg, unsigned flags);