He Xiao <xiheasas@xxxxxxxxx> writes: > after GREG, the insn becomes > > (insn 91 40 45 5 (set (reg:SI 27 r27 [orig:54+-2 ] [54]) > (high:SI (const_int 24930 [0x6162]))) 4 {arch_movsi} (nil) > (nil) > > which matches "arch_movsi" pattern, and thus 0x6162 is not qualified > for arch_move_operand, the final output is as follow: Why does this match arch_movsi? arch_movsi does not have HIGH in the pattern. Does your arch_move_operand predicate accept HIGH? If so, why? Note that there are a number of examples of backends with similar restrictions. E.g., mips. They usually do not use HIGH with CONST_INT; they use HIGH with SYMBOL_REF. For CONST_INT they split up the value in the movsi define_expand, and then use predicates to prevent the real insns from matching anything which the architecture does not support. Ian