[llvm-commits] CVS: llvm/test/Regression/Transforms/LICM/sink_inst.ll sink_load.ll sink_trapping_inst.ll
Chris Lattner
lattner at cs.uiuc.edu
Tue Dec 9 10:58:02 PST 2003
Changes in directory llvm/test/Regression/Transforms/LICM:
sink_inst.ll added (r1.1)
sink_load.ll added (r1.1)
sink_trapping_inst.ll added (r1.1)
---
Log message:
New testcases for LICM improvement: code sinking.
---
Diffs of the changes: (+55 -0)
Index: llvm/test/Regression/Transforms/LICM/sink_inst.ll
diff -c /dev/null llvm/test/Regression/Transforms/LICM/sink_inst.ll:1.1
*** /dev/null Tue Dec 9 10:57:01 2003
--- llvm/test/Regression/Transforms/LICM/sink_inst.ll Tue Dec 9 10:56:51 2003
***************
*** 0 ****
--- 1,18 ----
+ ; If the result of an instruction is only used outside of the loop, sink
+ ; the instruction to the exit blocks instead of executing it on every
+ ; iteration of the loop.
+ ;
+ ; RUN: llvm-as < %s | opt -licm | llvm-dis | grep -C1 mul | grep Out:
+
+ int %test(int %N) {
+ Entry:
+ br label %Loop
+ Loop:
+ %N_addr.0.pn = phi int [ %dec, %Loop ], [ %N, %Entry ]
+ %tmp.6 = mul int %N, %N_addr.0.pn
+ %dec = add int %N_addr.0.pn, -1
+ %tmp.1 = setne int %N_addr.0.pn, 1
+ br bool %tmp.1, label %Loop, label %Out
+ Out:
+ ret int %tmp.6
+ }
Index: llvm/test/Regression/Transforms/LICM/sink_load.ll
diff -c /dev/null llvm/test/Regression/Transforms/LICM/sink_load.ll:1.1
*** /dev/null Tue Dec 9 10:57:01 2003
--- llvm/test/Regression/Transforms/LICM/sink_load.ll Tue Dec 9 10:56:51 2003
***************
*** 0 ****
--- 1,20 ----
+ ; To reduce register pressure, if a load is hoistable out of the loop, and the
+ ; result of the load is only used outside of the loop, sink the load instead of
+ ; hoisting it!
+ ;
+ ; RUN: llvm-as < %s | opt -licm | llvm-dis | grep -C1 load | grep Out:
+
+ %X = global int 5
+
+ int %test(int %N) {
+ Entry:
+ br label %Loop
+ Loop:
+ %N_addr.0.pn = phi int [ %dec, %Loop ], [ %N, %Entry ]
+ %tmp.6 = load int* %X
+ %dec = add int %N_addr.0.pn, -1
+ %tmp.1 = setne int %N_addr.0.pn, 1
+ br bool %tmp.1, label %Loop, label %Out
+ Out:
+ ret int %tmp.6
+ }
Index: llvm/test/Regression/Transforms/LICM/sink_trapping_inst.ll
diff -c /dev/null llvm/test/Regression/Transforms/LICM/sink_trapping_inst.ll:1.1
*** /dev/null Tue Dec 9 10:57:01 2003
--- llvm/test/Regression/Transforms/LICM/sink_trapping_inst.ll Tue Dec 9 10:56:51 2003
***************
*** 0 ****
--- 1,17 ----
+ ; Potentially trapping instructions may be sunk as long as they are guaranteed
+ ; to be executed.
+ ;
+ ; RUN: llvm-as < %s | opt -licm | llvm-dis | grep -C1 div | grep Out:
+
+ int %test(int %N) {
+ Entry:
+ br label %Loop
+ Loop:
+ %N_addr.0.pn = phi int [ %dec, %Loop ], [ %N, %Entry ]
+ %tmp.6 = div int %N, %N_addr.0.pn
+ %dec = add int %N_addr.0.pn, -1
+ %tmp.1 = setne int %N_addr.0.pn, 0
+ br bool %tmp.1, label %Loop, label %Out
+ Out:
+ ret int %tmp.6
+ }
More information about the llvm-commits
mailing list