// Explicit zext pattern - should trigger the combine. unsigned long mul16to32(unsigned short a, unsigned short b) { return (unsigned long)a * (unsigned long)b; }