1. [PowerPC] Add intrinsic to read or set FPSCR register (details)
  2. [SyntaxTree] Implement the List construct. (details)
  3. [LoopInterchange] Form LCSSA phis for values in orig outer loop header. (details)
  4. [LoopInterchange] Move instructions from preheader to outer loop header. (details)
  5. [DebugInfo] Don't error for zero-length arange entries (details)
Commit dbcfbffc7ae46cc7b84257787681676144a1bd5f by qiucofan
[PowerPC] Add intrinsic to read or set FPSCR register

This patch introduces two intrinsics: llvm.ppc.setflm and
llvm.ppc.readflm. They read from or write to FPSCR register
(floating-point status & control) which contains rounding mode and
exception status.

To ensure correctness of program, we need to prevent FP operations from
being moved across these intrinsics (mffs/mtfsf instruction), so here I
set them as scheduling boundaries. We can relax such restriction if
FPSCR is modeled well in the future.

Reviewed By: steven.zhang

Differential Revision:
The file was modifiedllvm/lib/Target/PowerPC/PPCInstrInfo.h
The file was modifiedllvm/lib/Target/PowerPC/
The file was modifiedllvm/lib/Target/PowerPC/PPCInstrInfo.cpp
The file was modifiedllvm/include/llvm/IR/
The file was modifiedllvm/test/CodeGen/PowerPC/2008-10-28-f128-i32.ll
The file was addedllvm/test/CodeGen/PowerPC/read-set-flm.ll
The file was modifiedllvm/lib/Target/PowerPC/PPCISelLowering.cpp
Commit a90c78ac52615d256142ecd64fbedabb612dc73f by ecaldas
[SyntaxTree] Implement the List construct.

We defined a List construct to help with the implementation of list-like
grammar rules. This is a first implementation of this API.

Differential Revision:
The file was modifiedclang/lib/Tooling/Syntax/Tree.cpp
The file was modifiedclang/include/clang/Tooling/Syntax/Nodes.h
The file was modifiedclang/lib/Tooling/Syntax/Nodes.cpp
The file was modifiedclang/include/clang/Tooling/Syntax/Tree.h
Commit 54cb552b962097d0e3ef7306b69a3c82cc7fff37 by flo
[LoopInterchange] Form LCSSA phis for values in orig outer loop header.

Values defined in the outer loop header could be used in the inner loop
latch. In that case, we need to create LCSSA phis for them, because after
interchanging they will be defined in the new inner loop and used in the
new outer loop.
The file was modifiedllvm/lib/Transforms/Scalar/LoopInterchange.cpp
The file was modifiedllvm/test/Transforms/LoopInterchange/lcssa-preheader.ll
Commit 8393b9fd1f36d9273fa0720872e3996495aacc1c by flo
[LoopInterchange] Move instructions from preheader to outer loop header.

Instructions defined in the original inner loop preheader may depend on
values defined in the outer loop header, but the inner loop header will
become the entry block in the loop nest. Move the instructions from the
preheader to the outer loop header, so we do not break dominance. We
also have to check for unsafe instructions in the preheader. If there
are no unsafe instructions, all instructions should be movable.

Currently we move all instructions except the terminator and rely on
LICM to hoist out invariant instructions later.

Fixes PR45743
The file was modifiedllvm/test/Transforms/LoopInterchange/lcssa-preheader.ll
The file was addedllvm/test/Transforms/LoopInterchange/pr45743-move-from-inner-preheader.ll
The file was modifiedllvm/lib/Transforms/Scalar/LoopInterchange.cpp
Commit cb3a598c87db2db997401b82dfb3f7f80707194e by james.henderson
[DebugInfo] Don't error for zero-length arange entries

Although the DWARF specification states that .debug_aranges entries
can't have length zero, these can occur in the wild. There's no
particular reason to enforce this part of the spec, since functionally
they have no impact. The patch removes the error and introduces a new
warning for premature terminator entries which does not stop parsing.

Fixes See also which originally introduced the error.

Reviewed by: ikudrin, dblaikie

Differential Revision:
The file was modifiedllvm/include/llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h
The file was modifiedllvm/unittests/DebugInfo/DWARF/DWARFDebugArangeSetTest.cpp
The file was modifiedllvm/lib/DebugInfo/DWARF/DWARFContext.cpp
The file was modifiedllvm/lib/DebugInfo/DWARF/DWARFDebugArangeSet.cpp
The file was modifiedllvm/lib/DebugInfo/DWARF/DWARFDebugAranges.cpp