loading constant 0x739290001LL in rv32 can be done with three instructions output: li a1, 7 lui a1, 234128 addi a1, a1, 1 Similarly, loading 0x839290001LL in rv32 can be done within three instructions expected output: li a1, 8 lui a1, 234128 addi a1, a1, 1 However, riscv_build_integer does not handle this case well and makes a wrong prediction about the number of instructions needed and then the constant is forced to put in the memory via riscv_const_insns and emit_move_insn. real output: lui a4,%hi(.LC0) lw a2,%lo(.LC0)(a4) lw a3,%lo(.LC0+4)(a4) .LC0: .word958988289 .word8 comparison with clang: https://godbolt.org/z/v5nxTbKe9