[llvm-dev] Is read and write variables always translated to load and store IR instructions? (original) (raw)

Tim Northover via llvm-dev llvm-dev at lists.llvm.org
Sat Jan 19 13:36:43 PST 2019


Hi,

On Sat, 19 Jan 2019 at 17:09, Peng Yu via llvm-dev <llvm-dev at lists.llvm.org> wrote:

It seems that read and write access to variables are translated to load and store IR instructions.

Are they only translated to load and store IR instructions in .ll code? Could read and write accesses be translated to other IR instructions (for .0.0.preopt.bc only)? Thanks.

I think this is more a question for cfe-dev since llvm-dev only really gets involved once the IR has been generated.

That said, a proper answer probably involves some quite involved discussions about just what counts as an access. At the very least Clang will also generate calls to @llvm.memcpy.* for struct copies. For example:

typedef struct {
  int a;
} Foo;

void func(Foo f) {
  Foo g = f;
}

will cause Clang to initialize 'g' with a memcpy. memset can be generated similarly if you set a struct to 0.

Cheers.

Tim.



More information about the llvm-dev mailing list