[llvm] r261258 - [IR] Straighten out bundle overload of IRBuilder::CreateCall

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 18 16:14:29 PST 2016


Merged in r261282.
Also merged the follow-up r261263 in r261283.

Thanks,
Hnas

On Thu, Feb 18, 2016 at 1:15 PM, Hans Wennborg <hans at chromium.org> wrote:
> Let's have it bake in the tree for a while, and then I'll merge it.
>
> Thanks,
> Hans
>
> On Thu, Feb 18, 2016 at 1:11 PM, Reid Kleckner <rnk at google.com> wrote:
>> 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
>>>
>>>
>>


More information about the llvm-commits mailing list