[LLVMdev] Inferring dependencies in phi instructions

Evgeny Astigeevich evgeny.astigeevich at arm.com
Mon Jun 29 03:16:32 PDT 2015


Hi Anirudh,

'x' has a control dependency on 'y' because the value assigned to 'x'
depends on a path selected. This dependency can be converted into a data
dependency by means of a 'select' instruction because the control flow is
simple.
What is the problem with using phi-functions in DFG? Yes they require more
work to find out what they depend on.

Kind regards,
Evgeny Astigeevich

-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of Anirudh Sivaraman
Sent: 29 June 2015 07:25
To: LLVM Developers Mailing List
Subject: [LLVMdev] Inferring dependencies in phi instructions

I am trying to infer data dependencies using LLVM's def-use chains and I am
having trouble dealing with 'phi' instructions. Specifically,

If I am given the code snippet:

int foo() {
  int y = 1;
  int x;
  if (y) {
    x = 2;
  } else {
    x = 3;
  }
  return x;
}

Here, x has a data dependence on y (not control because x is assigned in
both halves), but LLVM expresses 'x' as: %x.0 = phi i32 [ 2, %2 ], [ 3, %3 ]
using phi-nodes, omitting the dependence on y.

If I write the function as:

int foo() {
  int y = 1;
  int x = y ? 2 : 3;
  return x;
},

the dependencies work out alright because LLVM now uses a select
instruction, where the dependence on y is explicit:

%y = select i1 %x, i32 2, i32 3

In general, I don't think I can convert phi nodes into select statements
(because a phi node can refer to values from more than two paths in general,
while select statements permit only two options, one each for a true and a
false branch). Any thoughts on how this is handled in practice would be very
helpful.

Anirudh
_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev







More information about the llvm-dev mailing list