rickgaiser wrote:

I'm testing with different assembly short loop forms to see where a possible 
warning could be added. The results are interesting. With assembly the 
MipsAsmParser will fill all delay slots with a NOP if `IsReorder` is true:
https://github.com/llvm/llvm-project/blob/689f9788d3e482791d45e1e631a1bacf78f318ba/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp#L2279-L2280
So `noreorder` is needed if the user wants to fill the delay slot with 
something else. The following inline assembly for instance I expected would 
work as a "short loop":
```C
int test_reorder(int n) {
    asm volatile (
        "1:\n"
        "   bnez   %0, 1b\n"
        "   addiu  %0, %0, -1\n"
        : "+r"(n)
    );
    return n;
}
```
Is compiled into this _infinite loop_ without warning:
```
.Ltmp0:
        .set    noreorder
        bnez    $4, .Ltmp0
        nop
        .set    reorder
        addiu   $4, $4, -1
```
Adding `noreorder` to the assembly will produce the expected result, but at the 
same time trigger the short loop bug on the r5900. So like you said:

> they who wield the noreorder directive “know what they are doing”

For now I'll consider adding the warning a separate feature out of scope for 
this PR.

https://github.com/llvm/llvm-project/pull/176666
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to