[PATCH] D135066: [LibCalls] Cast Char argument to 'int' before calling emitFPutC
Bjorn Pettersson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 4 03:52:51 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG491ac8f3e81c: [LibCalls] Cast Char argument to 'int' before calling emitFPutC (authored by bjope).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D135066/new/
https://reviews.llvm.org/D135066
Files:
llvm/include/llvm/Transforms/Utils/BuildLibCalls.h
llvm/lib/Transforms/Utils/BuildLibCalls.cpp
llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
Index: llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
===================================================================
--- llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
+++ llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
@@ -3209,11 +3209,13 @@
// Decode the second character of the format string.
if (FormatStr[1] == 'c') {
- // fprintf(F, "%c", chr) --> fputc(chr, F)
+ // fprintf(F, "%c", chr) --> fputc((int)chr, F)
if (!CI->getArgOperand(2)->getType()->isIntegerTy())
return nullptr;
- return copyFlags(
- *CI, emitFPutC(CI->getArgOperand(2), CI->getArgOperand(0), B, TLI));
+ Type *IntTy = B.getIntNTy(TLI->getIntSize());
+ Value *V = B.CreateIntCast(CI->getArgOperand(2), IntTy, /*isSigned*/ true,
+ "chari");
+ return copyFlags(*CI, emitFPutC(V, CI->getArgOperand(0), B, TLI));
}
if (FormatStr[1] == 's') {
@@ -3280,7 +3282,9 @@
if (Bytes == 1 && CI->use_empty()) { // fwrite(S,1,1,F) -> fputc(S[0],F)
Value *Char = B.CreateLoad(B.getInt8Ty(),
castToCStr(CI->getArgOperand(0), B), "char");
- Value *NewCI = emitFPutC(Char, CI->getArgOperand(3), B, TLI);
+ Type *IntTy = B.getIntNTy(TLI->getIntSize());
+ Value *Cast = B.CreateIntCast(Char, IntTy, /*isSigned*/ true, "chari");
+ Value *NewCI = emitFPutC(Cast, CI->getArgOperand(3), B, TLI);
return NewCI ? ConstantInt::get(CI->getType(), 1) : nullptr;
}
}
Index: llvm/lib/Transforms/Utils/BuildLibCalls.cpp
===================================================================
--- llvm/lib/Transforms/Utils/BuildLibCalls.cpp
+++ llvm/lib/Transforms/Utils/BuildLibCalls.cpp
@@ -1841,8 +1841,6 @@
IntTy, File->getType());
if (File->getType()->isPointerTy())
inferNonMandatoryLibFuncAttrs(M, FPutcName, *TLI);
- Char = B.CreateIntCast(Char, IntTy, /*isSigned*/true,
- "chari");
CallInst *CI = B.CreateCall(F, {Char, File}, FPutcName);
if (const Function *Fn =
Index: llvm/include/llvm/Transforms/Utils/BuildLibCalls.h
===================================================================
--- llvm/include/llvm/Transforms/Utils/BuildLibCalls.h
+++ llvm/include/llvm/Transforms/Utils/BuildLibCalls.h
@@ -226,8 +226,8 @@
/// Emit a call to the puts function. This assumes that Str is some pointer.
Value *emitPutS(Value *Str, IRBuilderBase &B, const TargetLibraryInfo *TLI);
- /// Emit a call to the fputc function. This assumes that Char can be casted to
- /// int (currently assuming int is i32), and File is a pointer to FILE.
+ /// Emit a call to the fputc function. This assumes that Char is an 'int', and
+ /// File is a pointer to FILE.
Value *emitFPutC(Value *Char, Value *File, IRBuilderBase &B,
const TargetLibraryInfo *TLI);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D135066.464944.patch
Type: text/x-patch
Size: 2869 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221004/f3e2629d/attachment.bin>
More information about the llvm-commits
mailing list