[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