http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60675
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Created attachment 32461 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32461&action=edit More reduced (below 14k) >From this reduced testcase here is the most important info from the reload dump: 344: r173:DF=r594:DF-r693:DF REG_DEAD r594:DF REG_EQUAL 1.0e+0-r324:DF Inserting insn reload before: 749: r693:DF=r324:DF Staticly defined alt reject+=6 0 Non pseudo reload: reject++ alt=0,overall=7,losers=0,rld_nregs=0 Choosing alt 0 in insn 749: (0) =w (1) ?rY {*movdf_aarch64} Staticly defined alt reject+=6 0 Non input pseudo reload: reject++ 1 Non-pseudo reload: reject+=2 1 Non input pseudo reload: reject++ alt=0,overall=22,losers=2,rld_nregs=2 Staticly defined alt reject+=6 1 Non-pseudo reload: reject+=2 1 Non input pseudo reload: reject++ alt=1,overall=15,losers=1,rld_nregs=1 0 Non input pseudo reload: reject++ 1 Non-pseudo reload: reject+=2 1 Non input pseudo reload: reject++ alt=2,overall=16,losers=2 -- refuse 0 Non input pseudo reload: reject++ alt=3: Bad operand -- refuse 0 Non input pseudo reload: reject++ alt=4,overall=7,losers=1,rld_nregs=1 0 Spill pseudo into memory: reject+=3 0 Non input pseudo reload: reject++ alt=5,overall=10,losers=1 -- refuse alt=6,overall=0,losers=0,rld_nregs=0 Choosing alt 6 in insn 266: (0) r (1) m {*movdf_aarch64} Staticly defined alt reject+=6 alt=0,overall=12,losers=1,rld_nregs=1 Staticly defined alt reject+=6 0 Non-pseudo reload: reject+=2 0 Non input pseudo reload: reject++ alt=1,overall=15,losers=1 -- refuse alt=2,overall=0,losers=0,rld_nregs=0 Choosing alt 2 in insn 262: (0) w (1) w {*movdf_aarch64} Staticly defined alt reject+=6 alt=0,overall=12,losers=1,rld_nregs=1 Staticly defined alt reject+=6 0 Non input pseudo reload: reject++ alt=1,overall=13,losers=1 -- refuse alt=2,overall=606,losers=1,rld_nregs=1 alt=3: Bad operand -- refuse 1 Non pseudo reload: reject++ alt=4,overall=1,losers=0,rld_nregs=0 Choosing alt 4 in insn 744: (0) w (1) m {*movdf_aarch64} Staticly defined alt reject+=6 0 Non input pseudo reload: reject++ alt=0,overall=619,losers=2,rld_nregs=2 Staticly defined alt reject+=6 0 Non input pseudo reload: reject++ alt=1,overall=13,losers=1,rld_nregs=1 0 Non input pseudo reload: reject++ alt=2,overall=607,losers=1,rld_nregs=1 0 Non input pseudo reload: reject++ alt=3: Bad operand -- refuse 0 Non input pseudo reload: reject++ 1 Spill pseudo into memory: reject+=3 alt=4,overall=16,losers=2 -- refuse 0 Non pseudo reload: reject++ alt=5,overall=1,losers=0,rld_nregs=0 Choosing alt 5 in insn 743: (0) m (1) w {*movdf_aarch64} 0 Non input pseudo reload: reject++ alt=0,overall=613,losers=2,rld_nregs=4 0 Costly loser: reject++ 0 Non input pseudo reload: reject++ alt=1,overall=14,losers=2,rld_nregs=4 0 Non input pseudo reload: reject++ 1 Costly loser: reject++ alt=2,overall=614,losers=2,rld_nregs=4 0 Costly loser: reject++ 0 Non input pseudo reload: reject++ 1 Costly loser: reject++ alt=3,overall=15,losers=2 -- refuse 0 Non input pseudo reload: reject++ 1 Spill pseudo into memory: reject+=3 alt=4,overall=16,losers=2 -- refuse 0 Non pseudo reload: reject++ alt=5,overall=7,losers=1,rld_nregs=2 0 Non pseudo reload: reject++ alt=6: Bad operand -- refuse 0 Costly loser: reject++ 0 Non input pseudo reload: reject++ alt=7,overall=8,losers=1 -- refuse 0 Non pseudo reload: reject++ 1 Costly loser: reject++ alt=8,overall=8,losers=1 -- refuse Choosing alt 5 in insn 737: (0) Ump (1) r {*movti_aarch64} Creating newreg=694, assigning class CORE_REGS to r694 It decides to use movti_aarch64 for some reason even though we don't have a TImode here, only DFmode or DImode.