<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 29, 2017 at 7:51 PM, Andrew Trick via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
<br>
> On Sep 22, 2017, at 10:34 AM, Thorsten Schütt via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br><br>
><br>
> #define GET_REGINFO_ENUM<br>
> #include "AArch64GenRegisterInfo.inc"<br>
><br>
> #define GET_INSTRINFO_ENUM<br>
> #include "AArch64GenInstrInfo.inc"<br>
><br>
> #define GET_SUBTARGETINFO_ENUM<br>
> #include "AArch64GenSubtargetInfo.inc"<br>
><br>
> #include "llvm/MC/MCSchedule.h"<br>
> #include "llvm/MC/MCRegisterInfo.h"<br>
> #include "llvm/MC/MCInstrDesc.h"<br>
> #include "llvm/MC/MCInstrInfo.h"<br>
> #include "llvm/MC/SubtargetFeature.h"<br>
> #include "llvm/MC/MCSubtargetInfo.h"<br>
><br>
> #define GET_INSTRINFO_MC_DESC<br>
> #include "AArch64GenInstrInfo.inc"<br>
><br>
> #define GET_SUBTARGETINFO_MC_DESC<br>
> #include "AArch64GenSubtargetInfo.inc"<br>
><br>
> #define GET_REGINFO_MC_DESC<br>
> #include "AArch64GenRegisterInfo.inc"<br>
><br>
> int main(int argc, char **argv) {<br>
>  llvm::MCInstrInfo II;<br>
><br>
>  llvm::InitAArch64MCInstrInfo(&<wbr>II);<br>
><br>
>  llvm::StringRef ref = II.getName(llvm::AArch64::<wbr>LDADDALX);<br>
>  llvm::MCInstrDesc d = II.get(llvm::AArch64::<wbr>LDADDALX);<br>
><br>
>  printf("name %s; class %d\n", ref.str().c_str(), d.SchedClass);<br>
><br>
>  printf("microops %d\n", llvm::ThunderX2T99Model.<wbr>getSchedClassDesc(d.<wbr>SchedClass)->NumMicroOps);<br>
><br>
>  return 0;<br>
> }<br>
><br>
> /*<br>
>   LDADDALB_LDADDALH_LDADDALW_<wbr>LDADDALX = 872, in Sched enum<br>
> */<br>
<br>
</div></div>I bet the problem is that “WriteAtomic” is marked unsupported, so it gets an invalid sched class. The invalid NumMicroOps means that the scheduler will assert if it ever sees that instruction.<br>
<br></blockquote><div><br></div><div style="font-family:verdana,sans-serif" class="gmail_default">​The scheduler does not assert if it sees LDADDAL, or any other of the LSE instructions on ThunderX2. We've been generating LSE code for months now, with LLVM built in debug+assert+expensive-checks mode.<br></div><div style="font-family:verdana,sans-serif" class="gmail_default"><br></div><div style="font-family:verdana,sans-serif" class="gmail_default">--Stefan​</div></div><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Stefan Teleman<br><a href="mailto:stefan.teleman@gmail.com" target="_blank">stefan.teleman@gmail.com</a></div></div></div>
</div></div>