Abhinash Jain
2013-Sep-01 11:31 UTC
[LLVMdev] Distinguishing Pointer Variable and Ordinary Variable
C Code :- int main() { int a=10,c; int *b; c=20; *b=a; return 0; } IR of above code :- define i32 @main() #0 { entry: 1. %retval = alloca i32, align 4 2. %a = alloca i32, align 4 3. %c = alloca i32, align 4 4. %b = alloca i32*, align 8 5. store i32 0, i32* %retval 6. store i32 10, i32* %a, align 4 7. store i32 20, i32* %c, align 4 8. %0 = load i32* %a, align 4 9. %1 = load i32** %b, align 8 10. store i32 %0, i32* %1, align 4 11. ret i32 0 } Line 8,9,10 of IR represents *b=a; Now I want to recognise whether i32* %1 on line 10 is a pointer variable or ordinary variable through llvm pass. So how to solve this issue ??? -- View this message in context: http://llvm.1065342.n5.nabble.com/Distinguishing-Pointer-Variable-and-Ordinary-Variable-tp60881.html Sent from the LLVM - Dev mailing list archive at Nabble.com.
Joey Gouly
2013-Sep-01 13:54 UTC
[LLVMdev] Distinguishing Pointer Variable and Ordinary Variable
Check it's type to see if it's a pointer or not? On 1 September 2013 12:31, Abhinash Jain <omnia at mailinator.com> wrote:> C Code :- > int main() > { > int a=10,c; > int *b; > c=20; > *b=a; > return 0; > } > > IR of above code :- > define i32 @main() #0 { > entry: > 1. %retval = alloca i32, align 4 > 2. %a = alloca i32, align 4 > 3. %c = alloca i32, align 4 > 4. %b = alloca i32*, align 8 > 5. store i32 0, i32* %retval > 6. store i32 10, i32* %a, align 4 > 7. store i32 20, i32* %c, align 4 > 8. %0 = load i32* %a, align 4 > 9. %1 = load i32** %b, align 8 > 10. store i32 %0, i32* %1, align 4 > 11. ret i32 0 > } > > > Line 8,9,10 of IR represents *b=a; > > Now I want to recognise whether i32* %1 on line 10 is a pointer variable > or > ordinary variable through llvm pass. > So how to solve this issue ??? > > > > -- > View this message in context: > http://llvm.1065342.n5.nabble.com/Distinguishing-Pointer-Variable-and-Ordinary-Variable-tp60881.html > Sent from the LLVM - Dev mailing list archive at Nabble.com. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130901/0540cad8/attachment.html>
Abhinash Jain
2013-Sep-01 14:47 UTC
[LLVMdev] Distinguishing Pointer Variable and Ordinary Variable
Sorry I have actually edited the post. I did check its type by using isa<PointerType>(cast<AllocaInst>(instr->getOperand(1))->getAllocatedType()) but it is only detecting i32** %b on line 8 of IR as a pointer type. Whereas I also want to detect the i32* %1 on line 11 of IR as a pointer type. So how can I do this?? -- View this message in context: http://llvm.1065342.n5.nabble.com/Distinguishing-Pointer-type-variable-and-Ordinary-Variable-tp60881p60883.html Sent from the LLVM - Dev mailing list archive at Nabble.com.
Apparently Analagous Threads
- [LLVMdev] Distinguishing Pointer Variable and Ordinary Variable
- [LLVMdev] Distinguishing Pointer Variable and Ordinary Variable
- [LLVMdev] Distinguishing Pointer Variable and Ordinary Variable
- [LLVMdev] Getting the memory address of all operands on an expression
- [LLVMdev] LLVM ERROR : Invalid instruction