diff options
author | Alan Hayward <alan.hayward@arm.com> | 2018-08-06 09:07:57 +0000 |
---|---|---|
committer | Alan Hayward <alahay01@gcc.gnu.org> | 2018-08-06 09:07:57 +0000 |
commit | 601e86a57f6ec7e9acdfe5767779a3c62735b0e6 (patch) | |
tree | 4b7c46858f06d0eca3f66da9b402027d4f825a9b /gcc/rtl.h | |
parent | 6e9f49e4560d19812307d6f50bee4d418c42dfe0 (diff) | |
download | gcc-601e86a57f6ec7e9acdfe5767779a3c62735b0e6.zip gcc-601e86a57f6ec7e9acdfe5767779a3c62735b0e6.tar.gz gcc-601e86a57f6ec7e9acdfe5767779a3c62735b0e6.tar.bz2 |
Add CLOBBER_HIGH expression
Includes documentation.
2018-08-06 Alan Hayward <alan.hayward@arm.com>
* doc/rtl.texi (clobber_high): Add.
(parallel): Add in clobber high
* rtl.c (rtl_check_failed_code3): Add function.
* rtl.def (CLOBBER_HIGH): Add expression.
* rtl.h (RTL_CHECKC3): Add macro.
(rtl_check_failed_code3): Add declaration.
(XC3EXP): Add macro.
From-SVN: r263326
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r-- | gcc/rtl.h | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -1100,6 +1100,14 @@ is_a_helper <rtx_note *>::test (rtx_insn *insn) __FUNCTION__); \ &_rtx->u.fld[_n]; })) +#define RTL_CHECKC3(RTX, N, C1, C2, C3) __extension__ \ +(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \ + const enum rtx_code _code = GET_CODE (_rtx); \ + if (_code != (C1) && _code != (C2) && _code != (C3)) \ + rtl_check_failed_code3 (_rtx, (C1), (C2), (C3), __FILE__, \ + __LINE__, __FUNCTION__); \ + &_rtx->u.fld[_n]; })) + #define RTVEC_ELT(RTVEC, I) __extension__ \ (*({ __typeof (RTVEC) const _rtvec = (RTVEC); const int _i = (I); \ if (_i < 0 || _i >= GET_NUM_ELEM (_rtvec)) \ @@ -1190,6 +1198,10 @@ extern void rtl_check_failed_code1 (const_rtx, enum rtx_code, const char *, extern void rtl_check_failed_code2 (const_rtx, enum rtx_code, enum rtx_code, const char *, int, const char *) ATTRIBUTE_NORETURN ATTRIBUTE_COLD; +extern void rtl_check_failed_code3 (const_rtx, enum rtx_code, enum rtx_code, + enum rtx_code, const char *, int, + const char *) + ATTRIBUTE_NORETURN ATTRIBUTE_COLD; extern void rtl_check_failed_code_mode (const_rtx, enum rtx_code, machine_mode, bool, const char *, int, const char *) ATTRIBUTE_NORETURN ATTRIBUTE_COLD; @@ -1208,6 +1220,7 @@ extern void rtvec_check_failed_bounds (const_rtvec, int, const char *, int, #define RTL_CHECK2(RTX, N, C1, C2) ((RTX)->u.fld[N]) #define RTL_CHECKC1(RTX, N, C) ((RTX)->u.fld[N]) #define RTL_CHECKC2(RTX, N, C1, C2) ((RTX)->u.fld[N]) +#define RTL_CHECKC3(RTX, N, C1, C2, C3) ((RTX)->u.fld[N]) #define RTVEC_ELT(RTVEC, I) ((RTVEC)->elem[I]) #define XWINT(RTX, N) ((RTX)->u.hwint[N]) #define CWI_ELT(RTX, I) ((RTX)->u.hwiv.elem[I]) @@ -1362,6 +1375,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, #define XCVECLEN(RTX, N, C) GET_NUM_ELEM (XCVEC (RTX, N, C)) #define XC2EXP(RTX, N, C1, C2) (RTL_CHECKC2 (RTX, N, C1, C2).rt_rtx) +#define XC3EXP(RTX, N, C1, C2, C3) (RTL_CHECKC3 (RTX, N, C1, C2, C3).rt_rtx) /* Methods of rtx_expr_list. */ @@ -2632,7 +2646,7 @@ do { \ /* For a SET rtx, SET_DEST is the place that is set and SET_SRC is the value it is set to. */ -#define SET_DEST(RTX) XC2EXP (RTX, 0, SET, CLOBBER) +#define SET_DEST(RTX) XC3EXP (RTX, 0, SET, CLOBBER, CLOBBER_HIGH) #define SET_SRC(RTX) XCEXP (RTX, 1, SET) #define SET_IS_RETURN_P(RTX) \ (RTL_FLAG_CHECK1 ("SET_IS_RETURN_P", (RTX), SET)->jump) |