[llvm-dev] ARM: Predicated returns considered analyzable?

Krzysztof Parzyszek via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 13 05:44:05 PDT 2015


On 8/13/2015 2:46 AM, James Molloy wrote:
>
> I'm not sure what the problem is here. For me, the function name
> "MBB::getFirstTerminator" you quoted implies that there may be more than
> one terminator. So it not returning the last terminator doesn't seem
> surprising at all.

The problem is that the first terminator is followed by a non-terminator.

The code snippet from the first email:
     t2CMPri %R1<kill>, 0, pred:14, pred:%noreg, %CPSR<imp-def>
     t2CMPri %R0<kill>, 3, pred:1, pred:%CPSR, %CPSR<imp-def>, 
%CPSR<imp-use,undef>
(1) %SP<def,tied1> = t2LDMIA_RET %SP<tied0>, pred:8, pred:%CPSR, 
%R7<def>, %PC<def>, %SP<imp-use,undef>, %R7<imp-use,undef>, 
%PC<imp-use,undef>
(2) tBLXi pred:14, pred:%noreg, <ga:@bar>, <regmask>, %LR<imp-def,dead>, 
%SP<imp-use>, %SP<imp-def>, %R0<imp-def,dead>
(3) %SP<def,tied1> = t2LDMIA_RET %SP<tied0>, pred:14, pred:%noreg, 
%R7<def>, %PC<def>

(1) is a terminator (predicated), (2) is a non-terminator, (3) is a 
terminator again.

-Krzysztof


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation


More information about the llvm-dev mailing list