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
Seemingly Similar 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?