[llvm] r228463 - [AArch64] Use the source location of the IR branch when creating Bcc
Ahmed Bougacha
ahmed.bougacha at gmail.com
Fri Feb 6 15:36:33 PST 2015
On Fri, Feb 6, 2015 at 3:28 PM, David Blaikie <dblaikie at gmail.com> wrote:
>
>
> On Fri, Feb 6, 2015 at 3:15 PM, Ahmed Bougacha <ahmed.bougacha at gmail.com>
> wrote:
>>
>> Author: ab
>> Date: Fri Feb 6 17:15:39 2015
>> New Revision: 228463
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=228463&view=rev
>> Log:
>> [AArch64] Use the source location of the IR branch when creating Bcc
>> from a conditional branch fed by an add/sub/mul-with-overflow node.
>>
>> We previously used the SDLoc of the overflow node, for no good reason.
>> In some cases, this led to the Bcc and B terminators having different
>> source orders, and DBG_VALUEs being inserted between them.
>>
>> The real issue is with the code that can't handle DBG_VALUEs between
>> terminators: the few places affected by this will be fixed soon.
>> In the meantime, fixing the SDLoc is a positive change no matter what.
>>
>> No tests, as I have no idea how to get .loc emitted for branches?
>
>
> .loc should be emitted for any instruction with a debug location (clang does
> omit debug locations on various branches from the frontend, but you can add
> them in by hand or find a case where clang doesn't omit them... ).
I did tweak the !dbg metadata for the branch (see attached testcase),
but I only get:
.loc 1 21 21 is_stmt 1 ; /path:21:21
str ...
b.vs ...
That is, the instruction before the branch (the store) gets a .loc,
but not the branch itself.
Am I missing something?
-Ahmed
>>
>>
>> rdar://19347133
>>
>> Modified:
>> llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
>>
>> Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp?rev=228463&r1=228462&r2=228463&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp (original)
>> +++ llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp Fri Feb 6
>> 17:15:39 2015
>> @@ -3263,8 +3263,8 @@ SDValue AArch64TargetLowering::LowerBR_C
>> OFCC = getInvertedCondCode(OFCC);
>> SDValue CCVal = DAG.getConstant(OFCC, MVT::i32);
>>
>> - return DAG.getNode(AArch64ISD::BRCOND, SDLoc(LHS), MVT::Other, Chain,
>> Dest,
>> - CCVal, Overflow);
>> + return DAG.getNode(AArch64ISD::BRCOND, dl, MVT::Other, Chain, Dest,
>> CCVal,
>> + Overflow);
>> }
>>
>> if (LHS.getValueType().isInteger()) {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.ll
Type: application/octet-stream
Size: 3735 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150206/0c766455/attachment.obj>
More information about the llvm-commits
mailing list