Alex Susu via llvm-dev
2017-Feb-12 02:10 UTC
[llvm-dev] Pre-RA scheduler does not generate NOPs when getHazardType() returns NoopHazard
Hello.
I am new to the schedulers implemented in the back end of LLVM.
I am trying to handle data hazards in my simple processor, with
instructions that
execute in 1 cycle.
I have tried the standard post-RA scheduler, implemented in
lib/CodeGen/PostRASchedulerList.cpp, (with a ScoreboardHazardRecognizer), but I
have some
issues with some consecutive instructions that are separated in the final ASM
listing and
they should not.
I also tried the standard pre-RA scheduler, implemented in
lib/CodeGen/ScheduleDAGRRList.cpp, (with a ScoreboardHazardRecognizer), but even
if I
report that I have a data hazard in getHazardType() and return NoopHazard, the
scheduler
will not insert a NOP instruction in the respective place where I report the
hazard . For
me it is more convenient, in principle, to use the pre-RA scheduler, but it is
not
generating NOPs.
Could you please tell me how can I generate NOPs with a pre-RA scheduler
when I am
already informing it that at the current place we have a NoopHazard.
Thank you,
Alex
PS: Also, could you please tell me if with the standard pre-RA scheduler with
ScoreboardHazardRecognizer I could also employ other useful program instructions
when
dealing with hazards, instead of using NOPs.
Alex Susu via llvm-dev
2017-Mar-21 13:29 UTC
[llvm-dev] Pre-RA scheduler does not generate NOPs when getHazardType() returns NoopHazard
Hello.
I am not sure if this is the correct answer to the question I put in the
previous
email, but please take a look at what I wrote in another thread at
http://lists.llvm.org/pipermail/llvm-dev/2017-March/111293.html .
Basically, I describe there I was more successful to use PreEmitNoops(),
instead of
the getHazardType() method which, when I return NoopHazard, it does NOT always
generate a
NOP - in my case it works for Store, but not for Load MachineInstructions.
Does the ScoreboardHazardRecognizer class generate (or not) a NOP
instruction, when
instructed to in getHazardType(), depending on the type of the instruction
analyzed?
Thank you,
Alex
On 2/12/2017 4:10 AM, Alex Susu wrote:> Hello.
> I am new to the schedulers implemented in the back end of LLVM.
> I am trying to handle data hazards in my simple processor, with
instructions that
> execute in 1 cycle.
>
> I have tried the standard post-RA scheduler, implemented in
> lib/CodeGen/PostRASchedulerList.cpp, (with a ScoreboardHazardRecognizer),
but I have some
> issues with some consecutive instructions that are separated in the final
ASM listing and
> they should not.
>
> I also tried the standard pre-RA scheduler, implemented in
> lib/CodeGen/ScheduleDAGRRList.cpp, (with a ScoreboardHazardRecognizer), but
even if I
> report that I have a data hazard in getHazardType() and return NoopHazard,
the scheduler
> will not insert a NOP instruction in the respective place where I report
the hazard . For
> me it is more convenient, in principle, to use the pre-RA scheduler, but it
is not
> generating NOPs.
> Could you please tell me how can I generate NOPs with a pre-RA
scheduler when I am
> already informing it that at the current place we have a NoopHazard.
>
> Thank you,
> Alex
>
> PS: Also, could you please tell me if with the standard pre-RA scheduler
with
> ScoreboardHazardRecognizer I could also employ other useful program
instructions when
> dealing with hazards, instead of using NOPs.
Hal Finkel via llvm-dev
2017-Mar-21 13:45 UTC
[llvm-dev] Pre-RA scheduler does not generate NOPs when getHazardType() returns NoopHazard
On 03/21/2017 08:29 AM, Alex Susu via llvm-dev wrote:> Hello. > I am not sure if this is the correct answer to the question I put > in the previous email, but please take a look at what I wrote in > another thread at > http://lists.llvm.org/pipermail/llvm-dev/2017-March/111293.html . > Basically, I describe there I was more successful to use > PreEmitNoops(), instead of the getHazardType() method which, when I > return NoopHazard, it does NOT always generate a NOP - in my case it > works for Store, but not for Load MachineInstructions. > > Does the ScoreboardHazardRecognizer class generate (or not) a NOP > instruction, when instructed to in getHazardType(), depending on the > type of the instruction analyzed?What do you mean? The ScoreboardHazardRecognizer does not generate NOP hazards. You need to override it to do that. The post-RA scheduler should then generate the NOPs (by calling your insertNoop). -Hal> > Thank you, > Alex > > > On 2/12/2017 4:10 AM, Alex Susu wrote: >> Hello. >> I am new to the schedulers implemented in the back end of LLVM. >> I am trying to handle data hazards in my simple processor, with >> instructions that >> execute in 1 cycle. >> >> I have tried the standard post-RA scheduler, implemented in >> lib/CodeGen/PostRASchedulerList.cpp, (with a >> ScoreboardHazardRecognizer), but I have some >> issues with some consecutive instructions that are separated in the >> final ASM listing and >> they should not. >> >> I also tried the standard pre-RA scheduler, implemented in >> lib/CodeGen/ScheduleDAGRRList.cpp, (with a >> ScoreboardHazardRecognizer), but even if I >> report that I have a data hazard in getHazardType() and return >> NoopHazard, the scheduler >> will not insert a NOP instruction in the respective place where I >> report the hazard . For >> me it is more convenient, in principle, to use the pre-RA scheduler, >> but it is not >> generating NOPs. >> Could you please tell me how can I generate NOPs with a pre-RA >> scheduler when I am >> already informing it that at the current place we have a NoopHazard. >> >> Thank you, >> Alex >> >> PS: Also, could you please tell me if with the standard pre-RA >> scheduler with >> ScoreboardHazardRecognizer I could also employ other useful program >> instructions when >> dealing with hazards, instead of using NOPs. > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-- Hal Finkel Lead, Compiler Technology and Programming Languages Leadership Computing Facility Argonne National Laboratory
Possibly Parallel Threads
- Specify special cases of delay slots in the back end
- Specify special cases of delay slots in the back end
- Specify special cases of delay slots in the back end
- Specify special cases of delay slots in the back end
- [LLVMdev] [llvm-commits] Bottom-Up Scheduling?