rs6000: Use unspec_volatile for darn (PR91481)
Every call to darn should deliver a *new* random number; such calls should not be CSEd together. So they should be unspec_volatile, not plain unspec. PR target/91481 * config/rs6000/rs6000.md (unspec): Delete UNSPEC_DARN, UNSPEC_DARN_32, and UNSPEC_DARN_RAW. (unspecv): New enumerator values UNSPECV_DARN, UNSPECV_DARN_32, and UNSPECV_DARN_RAW. (darn_32): Use an unspec_volatile, and UNSPECV_DARN_32. (darn_raw): Use an unspec_volatile, and UNSPECV_DARN_RAW. (darn): Use an unspec_volatile, and UNSPECV_DARN. From-SVN: r274835
This commit is contained in:
parent
71278ecd4e
commit
e99bfdd2a8
2 changed files with 17 additions and 6 deletions
|
@ -1,3 +1,14 @@
|
|||
2019-08-22 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR target/91481
|
||||
* config/rs6000/rs6000.md (unspec): Delete UNSPEC_DARN, UNSPEC_DARN_32,
|
||||
and UNSPEC_DARN_RAW.
|
||||
(unspecv): New enumerator values UNSPECV_DARN, UNSPECV_DARN_32, and
|
||||
UNSPECV_DARN_RAW.
|
||||
(darn_32): Use an unspec_volatile, and UNSPECV_DARN_32.
|
||||
(darn_raw): Use an unspec_volatile, and UNSPECV_DARN_RAW.
|
||||
(darn): Use an unspec_volatile, and UNSPECV_DARN.
|
||||
|
||||
2019-08-22 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* config/rs6000/altivec.md (unspec): Delete UNSPEC_DARN, UNSPEC_DARN_32,
|
||||
|
|
|
@ -134,9 +134,6 @@
|
|||
UNSPEC_LSQ
|
||||
UNSPEC_FUSION_GPR
|
||||
UNSPEC_STACK_CHECK
|
||||
UNSPEC_DARN
|
||||
UNSPEC_DARN_32
|
||||
UNSPEC_DARN_RAW
|
||||
UNSPEC_CMPRB
|
||||
UNSPEC_CMPRB2
|
||||
UNSPEC_CMPEQB
|
||||
|
@ -168,6 +165,9 @@
|
|||
UNSPECV_EH_RR ; eh_reg_restore
|
||||
UNSPECV_ISYNC ; isync instruction
|
||||
UNSPECV_MFTB ; move from time base
|
||||
UNSPECV_DARN ; darn 1 (deliver a random number)
|
||||
UNSPECV_DARN_32 ; darn 2
|
||||
UNSPECV_DARN_RAW ; darn 0
|
||||
UNSPECV_NLGR ; non-local goto receiver
|
||||
UNSPECV_MFFS ; Move from FPSCR
|
||||
UNSPECV_MFFSL ; Move from FPSCR light instruction version
|
||||
|
@ -14387,21 +14387,21 @@
|
|||
|
||||
(define_insn "darn_32"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r")
|
||||
(unspec:SI [(const_int 0)] UNSPEC_DARN_32))]
|
||||
(unspec_volatile:SI [(const_int 0)] UNSPECV_DARN_32))]
|
||||
"TARGET_P9_MISC"
|
||||
"darn %0,0"
|
||||
[(set_attr "type" "integer")])
|
||||
|
||||
(define_insn "darn_raw"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(unspec:DI [(const_int 0)] UNSPEC_DARN_RAW))]
|
||||
(unspec_volatile:DI [(const_int 0)] UNSPECV_DARN_RAW))]
|
||||
"TARGET_P9_MISC && TARGET_64BIT"
|
||||
"darn %0,2"
|
||||
[(set_attr "type" "integer")])
|
||||
|
||||
(define_insn "darn"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(unspec:DI [(const_int 0)] UNSPEC_DARN))]
|
||||
(unspec_volatile:DI [(const_int 0)] UNSPECV_DARN))]
|
||||
"TARGET_P9_MISC && TARGET_64BIT"
|
||||
"darn %0,1"
|
||||
[(set_attr "type" "integer")])
|
||||
|
|
Loading…
Add table
Reference in a new issue