[llvm-dev] Reducing the number of ptrtoint/inttoptrs that are generated by LLVM (original) (raw)
Juneyoung Lee via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 22 11:07:33 PST 2019
- Previous message: [llvm-dev] Reducing the number of ptrtoint/inttoptrs that are generated by LLVM
- Next message: [llvm-dev] Reducing the number of ptrtoint/inttoptrs that are generated by LLVM
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Ralf pointed out that psub cannot be used for propagating pointer equality if pointer-cast integer is involved;
a = p b = inttoptr(ptrtoint p) if ((psub inbounds a b) == 0) { use(b) // replacing b with a may be problematic, as it is essentially folding inttoptr(ptrtoint p) -> p, which is discussed at https://bugs.llvm.org/show_bug.cgi?id=34548 }
I'm sorry for the confusion. To propagate pointer equality, we certainly need a better solution. :\
Juneyoung Lee
On Fri, Jan 18, 2019 at 4:57 PM Juneyoung Lee <juneyoung.lee at sf.snu.ac.kr> wrote:
Hello Sanjoy,
_Yep, combining it with propagateEquality of pointers may raise problem. :_ However I believe propagateEquality should be fixed properly, and adding psub also suggests a solution for that. :) It is sound to replace a pointer with another if subtraction of them is 0: a = malloc() free(a) b = malloc() // Assume b == a numerically if ((psub inbounds a b) == 0) { // a and b are pointing to different objects, so the comparison becomes poison use(a) } => a = malloc() free(a) b = malloc() // Assume b == a numerically if ((psub inbounds a b) == 0) { use(b) } Juneyoung Lee On Fri, Jan 18, 2019 at 7:50 AM Sanjoy Das <sanjoy at playingwithpointers.com> wrote:
On Mon, Jan 14, 2019 at 3:23 AM Juneyoung Lee via llvm-dev <llvm-dev at lists.llvm.org> wrote: > Patch https://reviews.llvm.org/D56598 adds llvm.psub(p1,p2) intrinsic function, which subtracts two pointers and returns the difference. Its semantic is as follows. > > If p1 and p2 point to different objects, and neither of them is based on a pointer casted from an integer,
llvm.psub(p1, p2)
returns poison. For example,Are you proposing landing this in conjunction with some of the other stuff discussed in the twin allocation paper? Otherwise isn't this problematic with propagateEquality of pointers? a = malloc() free(a) b = malloc() // Assume b == a numerically if (a == b) { print(psub(b, b)) // prints 0 } => a = malloc() free(a) b = malloc() // Assume b == a numerically if (a == b) { print(psub(a, b)) // prints poison } Though I admit propagateEquality of pointers has many other problems like this.
-- Sanjoy -- Juneyoung Lee Software Foundation Lab, Seoul National University
--
Juneyoung Lee Software Foundation Lab, Seoul National University -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190123/a2c258ec/attachment.html>
- Previous message: [llvm-dev] Reducing the number of ptrtoint/inttoptrs that are generated by LLVM
- Next message: [llvm-dev] Reducing the number of ptrtoint/inttoptrs that are generated by LLVM
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]