[llvm-dev] Semantics of udef values in PHI instructions (original) (raw)
Johannes Doerfert via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 16 09:38:50 PDT 2021
- Previous message: [llvm-dev] Semantics of udef values in PHI instructions
- Next message: [llvm-dev] [MSP430] Plans for MSP430 improvements
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 8/16/21 9:04 AM, Roman Lebedev via llvm-dev wrote:
I would strongly advise against expecting/depending on undef happening to be replaced with anything in particular. That behaviour is not guaranteed.
+1
Roman On Mon, Aug 16, 2021 at 5:00 PM Charitha Saumya via llvm-dev <llvm-dev at lists.llvm.org> wrote: Thanks for the nice explanation.
Can I depend on this behaviour? In the example, this %unify.phi is added by one of my custom passes. Can I assume that if a loop is present the real value of %c.2 will still be %c.1 regardless of loop's execution behavior. Thanks Charitha
On Mon, Aug 16, 2021 at 7:55 AM Hideto Ueno <uenoku.tokotoko at gmail.com> wrote: Hi, I don't know how lli picks the value for
undef
but I think optimizations eliminate theundef
value in phi before the execution because optimization is allowed to changeundef
to an arbitrary value[0], soundef
can be replaced by %c.1. For example, early-cse optimizes%c.2
to%c.2 = phi i32 [ %c.0, %while.end ], [ %c.1, %while.end12 ]
. (link: https://godbolt.org/z/e1M7x5z5K ) [0] https://llvm.org/docs/LangRef.html#undefined-values Regards, Hideto On Mon, Aug 16, 2021 at 8:50 PM Hideto Ueno <uenoku.tokotoko at gmail.com> wrote: Hi,I don't know how lli picks the value for
undef
but I think optimizations eliminate theundef
value in phi before the execution because optimization is allowed to changeundef
to an arbitrary value[0], soundef
can be replaced by %c.1. For example, early-cse optimizes%c.2
to%c.2 = phi i32 [ %c.0, %while.end ], [ %c.1, %while.end12 ]
. (link: https://godbolt.org/z/e1M7x5z5K ) [0] https://llvm.org/docs/LangRef.html#undefined-values Regards, Hideto On Mon, Aug 16, 2021 at 6:55 PM Charitha Saumya via llvm-dev <llvm-dev at lists.llvm.org> wrote: Hi,Consider the following LLVM IR snippet. (also attached) the value of %unify.phi is undefined if the loop body (while.body9) is executed, otherwise it has some specific value (%c.1 is a defined value). However when I execute this IR (using lli), the value of %c.2 is always the value of %c.1, even if the loop is executed multiple times. What is the reason for this behavior? how undefined values are handled in LLVM and is this behaviour architecture dependent (depending on how undef is handled in Codegen) ? Thanks Charitha
LLVM Developers mailing list llvm-dev at lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
LLVM Developers mailing list llvm-dev at lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
LLVM Developers mailing list llvm-dev at lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
- Previous message: [llvm-dev] Semantics of udef values in PHI instructions
- Next message: [llvm-dev] [MSP430] Plans for MSP430 improvements
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]