https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51492
--- Comment #16 from Li Pan <pan2.li at intel dot com> --- I have a try like below and finally have the Standard Name "SAT_ADD". Could you please help to double-check if my understanding is correct? Given below example code below: typedef unsigned int uint32_t; uint32_t sat_add (uint32_t x, uint32_t y) { return (x + y) | - ((x + y) < x); } And then add one simpify to match.pd and define new DEF_INTERNAL_OPTAB_FN for it. Then we have the SAT_ADD representation after expand. uint32_t sat_add (uint32_t x, uint32_t y) { uint32_t _6; ;; basic block 2, loop depth 0 ;; pred: ENTRY _6 = .SAT_ADD (x_4(D), y_5(D)); [tail call] return _6; ;; succ: EXIT } If everything goes well, I will prepare the patch for it later. Thanks.