[MachineScheduler] Add support for clustering mem ops with FI base operands
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>
Wed, 28 Nov 2018 12:00:28 +0000 (12:00 +0000)
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>
Wed, 28 Nov 2018 12:00:28 +0000 (12:00 +0000)
commit879087ce5b56712ccfa96b286cec49fcce95f366
tree9daed5b277c06402db7f9890526b5b8d56758e51
parentd7eebd6d831fa80c3840f10120c235db65f650da
[MachineScheduler] Add support for clustering mem ops with FI base operands

Before this patch, the following stores in `merge_fail` would fail to be
merged, while they would get merged in `merge_ok`:

```
void use(unsigned long long *);
void merge_fail(unsigned key, unsigned index)
{
  unsigned long long args[8];
  args[0] = key;
  args[1] = index;
  use(args);
}
void merge_ok(unsigned long long *dst, unsigned a, unsigned b)
{
  dst[0] = a;
  dst[1] = b;
}
```

The reason is that `getMemOpBaseImmOfs` would return false for FI base
operands.

This adds support for this.

Differential Revision: https://reviews.llvm.org/D54847

llvm-svn: 347747
llvm/lib/CodeGen/MachineScheduler.cpp
llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
llvm/test/CodeGen/AArch64/arm64-memset-inline.ll
llvm/test/CodeGen/AArch64/cluster-frame-index.mir [new file with mode: 0644]