[BuildLibCalls] emitPutChar should infer function attributes for putchar

When InstCombine calls into SimplifyLibCalls and it createa putChar calls, we don't infer the attributes. And since SimplifyLibCalls doesn't use InstCombine's IRBuilder the calls doesn't end up in the worklist on this iteration of InstCombine. So it gets picked up on the next iteration where it causes an IR change. This of course causes InstCombine to run another iteration.

So this patch just gets the attributes right the first time. We already did this for puts and some other libcalls.

Differential Revision: https://reviews.llvm.org/D31094

llvm-svn: 298171
This commit is contained in:
Craig Topper 2017-03-17 23:48:02 +00:00
parent 573624a9c2
commit 0f5063c754
1 changed files with 1 additions and 0 deletions

View File

@ -920,6 +920,7 @@ Value *llvm::emitPutChar(Value *Char, IRBuilder<> &B,
Module *M = B.GetInsertBlock()->getModule(); Module *M = B.GetInsertBlock()->getModule();
Value *PutChar = M->getOrInsertFunction("putchar", B.getInt32Ty(), Value *PutChar = M->getOrInsertFunction("putchar", B.getInt32Ty(),
B.getInt32Ty(), nullptr); B.getInt32Ty(), nullptr);
inferLibFuncAttributes(*M->getFunction("putchar"), *TLI);
CallInst *CI = B.CreateCall(PutChar, CallInst *CI = B.CreateCall(PutChar,
B.CreateIntCast(Char, B.CreateIntCast(Char,
B.getInt32Ty(), B.getInt32Ty(),