[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