[LLVMdev] metadata syntax
Chris Lattner
clattner at apple.com
Sat Apr 25 13:49:05 PDT 2009
On Apr 22, 2009, at 12:14 AM, Nick Lewycky wrote:
> I'm looking for input into the syntax for future metadata work. The
> plan
> is to make MDNodes hold a list of WeakVHs which will allow us to track
> metadata associated with values even through calls to
> ReplaceAllUsesWith. It also means that you can refer to other Values
> in
> the program, including instructions in another Function.
>
> That's where the problems begin. There's currently no way in llvm
> assembly to refer to instructions in another function, though that's
> not
> hard to solve; I propose "@func/%tmp" as the syntax. The harder
> problem
> is how to express references to void instructions (stores, branches,
> switches) which historically have not been allowed to have names since
> they could never be referred to.
I don't see a great need to support references to values in different
functions.
> The obvious solution is to let them have names. The trouble is that
> this
> breaks .ll syntax for any program that's using old-style anonymous
> instructions. For example:
>
> define i32 @foo(i32* %ptr) {
> add i32 1, 2 ; %1
> store i32 0, i32* %ptr ; previously ignored, now %2
> add i32 3, 4 ; previously %2, now %3
> ret i32 %2 ;; illegal! refers to the store not the add
> }
>
> Is this okay? Or do we need to come up with a different solution? Any
> suggestions?
We can't break this. I'd suggest putting void-value'd stuff in a
separate namespace, perhaps !123 ?
That way they'd be numbered independently of the %'s.
-Chris
More information about the llvm-dev
mailing list