LoongArch: Don't emit dbar 0x700 if -mld-seq-sa
This option (CPUCFG word 0x3 bit 23) means "the hardware guarantee that two loads on the same address won't be reordered with each other". Thus we can omit the "load-load" barrier dbar 0x700. This is only a micro-optimization because dbar 0x700 is already treated as nop if the hardware supports LD_SEQ_SA. gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_print_operand): Don't print dbar 0x700 if TARGET_LD_SEQ_SA. * config/loongarch/sync.md (atomic_load<mode>): Likewise.
This commit is contained in:
parent
5d3d605553
commit
181ed726b2
2 changed files with 6 additions and 5 deletions
|
@ -6061,7 +6061,7 @@ loongarch_print_operand (FILE *file, rtx op, int letter)
|
|||
if (loongarch_cas_failure_memorder_needs_acquire (
|
||||
memmodel_from_int (INTVAL (op))))
|
||||
fputs ("dbar\t0b10100", file);
|
||||
else
|
||||
else if (!TARGET_LD_SEQ_SA)
|
||||
fputs ("dbar\t0x700", file);
|
||||
break;
|
||||
|
||||
|
|
|
@ -119,13 +119,14 @@
|
|||
case MEMMODEL_SEQ_CST:
|
||||
return "dbar\t0x11\\n\\t"
|
||||
"ld.<size>\t%0,%1\\n\\t"
|
||||
"dbar\t0x14\\n\\t";
|
||||
"dbar\t0x14";
|
||||
case MEMMODEL_ACQUIRE:
|
||||
return "ld.<size>\t%0,%1\\n\\t"
|
||||
"dbar\t0x14\\n\\t";
|
||||
"dbar\t0x14";
|
||||
case MEMMODEL_RELAXED:
|
||||
return "ld.<size>\t%0,%1\\n\\t"
|
||||
"dbar\t0x700\\n\\t";
|
||||
return TARGET_LD_SEQ_SA ? "ld.<size>\t%0,%1\\n\\t"
|
||||
: "ld.<size>\t%0,%1\\n\\t"
|
||||
"dbar\t0x700";
|
||||
|
||||
default:
|
||||
/* The valid memory order variants are __ATOMIC_RELAXED, __ATOMIC_SEQ_CST,
|
||||
|
|
Loading…
Add table
Reference in a new issue