Shah, Mrunal J
2008-Dec-07 01:30 UTC
[LLVMdev] How to extract loop body into a new function?
Hi All, I am having trouble extracting loop body into a new function. The ExtractLoop() or ExtractBasicBlock() extracts the entire loop along with the header into a new function. All I want is to extract the body of the loop into a new function(without the header). Is this possible? Thanks, Mrunal
Shah, Mrunal J
2008-Dec-07 01:46 UTC
[LLVMdev] How to extract loop body into a new function?
Sorry! It worked with ExtractBasicBlock() ----- Original Message ----- From: "Mrunal J Shah" <mrunal.shah at gatech.edu> To: "llvmdev" <llvmdev at cs.uiuc.edu> Sent: Saturday, December 6, 2008 8:30:33 PM GMT -05:00 US/Canada Eastern Subject: [LLVMdev] How to extract loop body into a new function? Hi All, I am having trouble extracting loop body into a new function. The ExtractLoop() or ExtractBasicBlock() extracts the entire loop along with the header into a new function. All I want is to extract the body of the loop into a new function(without the header). Is this possible? Thanks, Mrunal _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Shah, Mrunal J
2008-Dec-07 04:00 UTC
[LLVMdev] How to extract loop body into a new function?
False Alarm!! Still don't know how to do it! I am trying to write a transformation pass to extract a loop body into a function. For example: The Loop in question is: for (i2 = 0; i2 < LOOP_SIZE; i2++) { A[B[i2]] = 2 * B[i2]; } The IR for which is: bb13: ; preds = %bb13, %bb %i2.0.reg2mem.0 = phi i32 [ 0, %bb ], [ %indvar.next62, %bb13 ] ; <i32> [#uses=2] %tmp15 = getelementptr [25 x i32]* %B, i32 0, i32 %i2.0.reg2mem.0 ; <i32*> [#uses=1] %tmp16 = load i32* %tmp15, align 4 ; <i32> [#uses=2] %tmp20 = shl i32 %tmp16, 1 ; <i32> [#uses=1] %tmp21 = getelementptr [25 x i32]* %A, i32 0, i32 %tmp16 ; <i32*> [#uses=1] store i32 %tmp20, i32* %tmp21, align 4 %indvar.next62 = add i32 %i2.0.reg2mem.0, 1 ; <i32> [#uses=2] %exitcond63 = icmp eq i32 %indvar.next62, 25 ; <i1> [#uses=1] br i1 %exitcond63, label %bb30, label %bb13 I want to be able to extract: A[B[i2]] = 2 * B[i2]; into a function myfunc() { A[B[i2]] = 2 * B[i2]; } How can I do this? Any hints?? Thanks, Mrunal ----- Original Message ----- From: "Mrunal J Shah" <mrunal.shah at gatech.edu> To: "LLVM Developers Mailing List" <llvmdev at cs.uiuc.edu> Sent: Saturday, December 6, 2008 8:46:00 PM GMT -05:00 US/Canada Eastern Subject: Re: [LLVMdev] How to extract loop body into a new function? Sorry! It worked with ExtractBasicBlock() ----- Original Message ----- From: "Mrunal J Shah" <mrunal.shah at gatech.edu> To: "llvmdev" <llvmdev at cs.uiuc.edu> Sent: Saturday, December 6, 2008 8:30:33 PM GMT -05:00 US/Canada Eastern Subject: [LLVMdev] How to extract loop body into a new function? Hi All, I am having trouble extracting loop body into a new function. The ExtractLoop() or ExtractBasicBlock() extracts the entire loop along with the header into a new function. All I want is to extract the body of the loop into a new function(without the header). Is this possible? Thanks, Mrunal _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev