The DAG Combiner tries to generate literal pools for floating point constants when both -arm-execute-only and vfp instructions are enabled:
(a cond b) ? 1.0f : 2.0f -> load (tmp + ((a cond b) ? 0 : 4)
reproducer.ll:
define arm_aapcs_vfpcc float @lower_fpconst_select(float %f) { %cmp = fcmp nnan oeq float %f, 0.000000e+00 %sel = select i1 %cmp, float 5.000000e+08, float 5.000000e+09 ret float %sel }
$ llc -mtriple=thumbv8m.main -arm-execute-only -mattr=fp-armv8 reproducer.ll
execute-only should not generate constant pools
UNREACHABLE executed at llvm/lib/Target/ARM/ARMISelLowering.cpp:7640!
These *LEApcrel are pseudo instructions that load a PC-relative address. They should never expand to MOVW/MOVT.