[llvm] r261258 - [IR] Straighten out bundle overload of IRBuilder::CreateCall
Reid Kleckner via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 18 13:11:29 PST 2016
We should, the bug is easy to trigger at -O2:
#include <stdio.h>
int main() {
try {
throw 1;
} catch (int) {
fprintf(stderr, "asdf\n");
}
}
On Thu, Feb 18, 2016 at 1:07 PM, David Majnemer <david.majnemer at gmail.com>
wrote:
> Can this be merged into 3.8?
>
> On Thu, Feb 18, 2016 at 12:57 PM, Reid Kleckner via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: rnk
>> Date: Thu Feb 18 14:57:41 2016
>> New Revision: 261258
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=261258&view=rev
>> Log:
>> [IR] Straighten out bundle overload of IRBuilder::CreateCall
>>
>> IRBuilder has two ways of putting bundle operands on calls: the default
>> operand bundle, and an overload of CreateCall that takes an operand
>> bundle list.
>>
>> Previously, this overload used a default argument of None. This made it
>> impossible to distinguish between the case were the caller doesn't care
>> about bundles, and the case where the caller explicitly wants no
>> bundles. We behaved as if they wanted the latter behavior rather than
>> the former, which led to problems with simplifylibcalls and WinEH.
>>
>> This change fixes it by making the parameter non-optional, so we can
>> distinguish these two cases.
>>
>> Modified:
>> llvm/trunk/include/llvm/IR/IRBuilder.h
>> llvm/trunk/test/Transforms/InstCombine/fprintf-1.ll
>>
>> Modified: llvm/trunk/include/llvm/IR/IRBuilder.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IRBuilder.h?rev=261258&r1=261257&r2=261258&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/IR/IRBuilder.h (original)
>> +++ llvm/trunk/include/llvm/IR/IRBuilder.h Thu Feb 18 14:57:41 2016
>> @@ -1547,16 +1547,7 @@ public:
>> }
>>
>> CallInst *CreateCall(Value *Callee, ArrayRef<Value *> Args = None,
>> - ArrayRef<OperandBundleDef> OpBundles = None,
>> const Twine &Name = "", MDNode *FPMathTag =
>> nullptr) {
>> - CallInst *CI = CallInst::Create(Callee, Args, OpBundles);
>> - if (isa<FPMathOperator>(CI))
>> - CI = cast<CallInst>(AddFPMathAttributes(CI, FPMathTag, FMF));
>> - return Insert(CI, Name);
>> - }
>> -
>> - CallInst *CreateCall(Value *Callee, ArrayRef<Value *> Args,
>> - const Twine &Name, MDNode *FPMathTag = nullptr) {
>> PointerType *PTy = cast<PointerType>(Callee->getType());
>> FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
>> return CreateCall(FTy, Callee, Args, Name, FPMathTag);
>> @@ -1569,6 +1560,15 @@ public:
>> if (isa<FPMathOperator>(CI))
>> CI = cast<CallInst>(AddFPMathAttributes(CI, FPMathTag, FMF));
>> return Insert(CI, Name);
>> + }
>> +
>> + CallInst *CreateCall(Value *Callee, ArrayRef<Value *> Args,
>> + ArrayRef<OperandBundleDef> OpBundles,
>> + const Twine &Name = "", MDNode *FPMathTag =
>> nullptr) {
>> + CallInst *CI = CallInst::Create(Callee, Args, OpBundles);
>> + if (isa<FPMathOperator>(CI))
>> + CI = cast<CallInst>(AddFPMathAttributes(CI, FPMathTag, FMF));
>> + return Insert(CI, Name);
>> }
>>
>> CallInst *CreateCall(Function *Callee, ArrayRef<Value *> Args,
>>
>> Modified: llvm/trunk/test/Transforms/InstCombine/fprintf-1.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/fprintf-1.ll?rev=261258&r1=261257&r2=261258&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/Transforms/InstCombine/fprintf-1.ll (original)
>> +++ llvm/trunk/test/Transforms/InstCombine/fprintf-1.ll Thu Feb 18
>> 14:57:41 2016
>> @@ -61,6 +61,15 @@ define void @test_simplify4(%FILE* %fp)
>> ; CHECK-IPRINTF-NEXT: ret void
>> }
>>
>> +define void @test_simplify5(%FILE* %fp) {
>> +; CHECK-LABEL: @test_simplify5(
>> + %fmt = getelementptr [13 x i8], [13 x i8]* @hello_world, i32 0, i32 0
>> + call i32 (%FILE*, i8*, ...) @fprintf(%FILE* %fp, i8* %fmt) [ "deopt"()
>> ]
>> +; CHECK-NEXT: call i32 @fwrite(i8* getelementptr inbounds ([13 x i8],
>> [13 x i8]* @hello_world, i32 0, i32 0), i32 12, i32 1, %FILE* %fp) [
>> "deopt"() ]
>> + ret void
>> +; CHECK-NEXT: ret void
>> +}
>> +
>> define void @test_no_simplify1(%FILE* %fp) {
>> ; CHECK-IPRINTF-LABEL: @test_no_simplify1(
>> %fmt = getelementptr [3 x i8], [3 x i8]* @percent_f, i32 0, i32 0
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160218/8c259208/attachment.html>
More information about the llvm-commits
mailing list