[PATCH] D39008: [CodeGen] Propagate may-alias'ness of lvalues with TBAA info

Ivan Kosarev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 25 09:12:40 PDT 2017


kosarev added a comment.

Now that https://reviews.llvm.org/D38796 is comitted and added the tbaa-cast.cpp test case to the mainline, we fail on it with this patch applied. The reason is that we have no special TBAA type node for may-alias accesses, so everything that ever been a potential access to a character type turns into a may-alias access and propagates as such.

The test case reads:

  struct V {
    unsigned n;
  };
  
  struct S {
    char bytes[4];
  };
  
  void foo(S *p) {
    ((V*)p->bytes)->n = 5;
  }

Here, p->bytes decays to a pointer to char, meaning the pointee object is considered may-alias and so it is after the explicit cast.

This arises an interesting question: should we introduce a special representation for may-alias accesses to distinct them from character-typed accesses? Or, maybe explicit casts should not derive their may-alias'ness from their source operands? Or, maybe we want to consider all explicit casts of the form ##(T*)E## where ##T*## and ##typeof(E)## point to different types as pointers to may-alias objects?


Repository:
  rL LLVM

https://reviews.llvm.org/D39008





More information about the cfe-commits mailing list