dmgreen added inline comments.

================
Comment at: llvm/lib/Target/ARM/ARMFixCortexA57AES1742098Pass.cpp:200-207
+  case ARM::VMOVv2f32:
+  case ARM::VMOVv4f32:
+  case ARM::VMOVv2i32:
+  case ARM::VMOVv4i32:
+  case ARM::VMOVv4i16:
+  case ARM::VMOVv8i16:
+  case ARM::VMOVv8i8:
----------------
Are these vmov of an immediate? Are they not safe?

I was expecting it to be the lanes sets (VSETLNi8) and other scalar 
instructions that were unsafe.


================
Comment at: llvm/lib/Target/ARM/ARMFixCortexA57AES1742098Pass.cpp:306
+          // fixup at the start of the function.
+          LLVM_DEBUG(dbgs()
+                     << "Fixup Planned: Live-In (with safe defining instrs): "
----------------
lenary wrote:
> dmgreen wrote:
> > Can you explain more about the IsLiveIn && UnsafeCount==0 case. Am I 
> > understanding that correctly that it would be:
> > ```
> > function(q0, ...)
> >   lotsofcode...
> >   q0 = load
> >   aes q0
> > ```
> > Is there a better way to detect that the live-in doesn't matter in cases 
> > like that?
> I don't believe there is, and this comes down to issues with the 
> `RDA.getGlobalReachingDefs` implementation, which I want to fix/enhance, but 
> in a follow-up patch.
> 
> To start with, this is actually not a problem, as the pass is intended to be 
> conservative, and we know the clobbers are a no-op at the architectural level 
> (we insert them for their micro-architectural effects). So code will still do 
> the right thing, but maybe with a little too much overhead in the case you 
> showed.
> 
> However, this is necessary in some other cases, such as:
> 
> ```
> function(q0)
>    code
>    conditional branch to L2
> L1:
>    q0 = safe_op(…)
>    branch to L3
> L2:
>    code without update to q0
> L3:
>    aes q0
> ```
> 
> In this case, `AllDefs` is a set containing one single defining instruction 
> for Q0, because there is only one within the function (which is all that 
> `RDA.getGlobalReachingDefs` can report instructions for).
> 
> But in my example, we *need* to protect q0 on the other paths, because the 
> safe definitions of q0, when considered as a set, do not entirely dominate 
> the AES use of q0 (this is slightly stretching the conventional definition of 
> dominance, but think of this as "there exists a path from entry to the aes, 
> which does not contain any of the safe instructions". Sadly, MachineDominance 
> doesn't allow us to make this kind of query either!).
> 
> In this case though, it is safe to insert the protection at function entry, 
> because that will (by definition) dominate all the AES uses, and the 
> protection doesn't need to be dominated by the safe definitions, as we know 
> they're safe.
> 
> I intend to follow-up this initial patch with an enhancement to 
> ReachingDefAnalysis which will also provide the information that you have a 
> set of defs inside the function, and also you're live-in, as this is required 
> info for any conservative pass using the ReachingDefAnalysis. I felt, 
> however, that given the pass is safe as-is, it was good to proceed without 
> this enhancement.
> 
> 
> 
> 
OK sounds good.


================
Comment at: llvm/lib/Target/ARM/ARMTargetMachine.cpp:585
 
+  addPass(createARMFixCortexA57AES1742098Pass());
+
----------------
lenary wrote:
> dmgreen wrote:
> > Passes can't insert new instructions (or move things further apart) after 
> > ConstantIslandPass. The branches/constant pools it has created may go out 
> > of range of the instructions that use them. Would it be OK to move it 
> > before that?
> TIL. I'll add a comment about the constant island pass as well.
> 
> Should I also look at the restrictions on the Branch Targets pass? I can 
> imagine we also don't want to separate instructions once we've calculated 
> their targets locally?
Yeah - It sounds like the BTI would need to remain as the first instruction in 
the block.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119720/new/

https://reviews.llvm.org/D119720

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to