Closed
Description
We are currently falling off FastISel to the optimized SelectionDAG instruction selector in pretty much every function, hurting our codegen time in debug builds. You can verify this by running llc -O0 -fast-isel -fast-isel-abort
. We have the following issues:
- FastISel does not support the
invoke
instruction. Proposed solution: Add this support to LLVM. - FastISel does not support the
switch
instruction. Proposed solution: Add this support to LLVM. - FastISel does not support comparisons on
i1
. Proposed solution: Add this support to LLVM. - FastISel does not support the
llvm.assume
intrinsic. Proposed solution: Ignore that intrinsic in LLVM. - FastISel does not allow first-class aggregates to be used, but we use first-class aggregates when loading and storing slices (e.g.
store { i8*, i32 } %1, %2
). Proposed solution: Stop doing this in trans.