CodeGen: Improve generated IR for __builtin_mul_overflow(uint, uint, int)
authorTom Stellard <tstellar@redhat.com>
Thu, 17 Dec 2020 18:43:00 +0000 (10:43 -0800)
committerTom Stellard <tstellar@redhat.com>
Thu, 17 Dec 2020 22:30:31 +0000 (14:30 -0800)
commit3203143f1356a4e4e3ada231156fc6da6e1a9f9d
tree88f591eeea6bbd8249c3834fb238af48c8def7a2
parent71a1b9fe76acfea8920e143c807c5cb8bf510254
CodeGen: Improve generated IR for __builtin_mul_overflow(uint, uint, int)

Add a special case for handling __builtin_mul_overflow with unsigned
inputs and a signed output to avoid emitting the __muloti4 library
call on x86_64.  __muloti4 is not implemented in libgcc, so avoiding
this call fixes compilation of some programs that call
__builtin_mul_overflow with these arguments.

For example, this fixes the build of cpio with clang, which includes code from
gnulib that calls __builtin_mul_overflow with these argument types.

Reviewed By: vsk

Differential Revision: https://reviews.llvm.org/D84405
clang/lib/CodeGen/CGBuiltin.cpp
clang/test/CodeGen/builtins-overflow.c