[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