DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S32, BRIG_OPCODE_BITEXTRACT,
BRIG_TYPE_S32, "__hsail_bitextract_s32",
- BT_FN_INT_INT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT_INT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U32, BRIG_OPCODE_BITEXTRACT,
BRIG_TYPE_U32, "__hsail_bitextract_u32",
- BT_FN_UINT_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S64, BRIG_OPCODE_BITEXTRACT,
BRIG_TYPE_S64, "__hsail_bitextract_s64",
- BT_FN_LONG_LONG_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_LONG_LONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U64, BRIG_OPCODE_BITEXTRACT,
BRIG_TYPE_U64, "__hsail_bitextract_u64",
- BT_FN_ULONG_ULONG_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_ULONG_ULONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U32, BRIG_OPCODE_BITINSERT,
BRIG_TYPE_U32, "__hsail_bitinsert_u32",
- BT_FN_UINT_UINT_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U64, BRIG_OPCODE_BITINSERT,
BRIG_TYPE_U64, "__hsail_bitinsert_u64",
BT_FN_ULONG_ULONG_ULONG_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B32, BRIG_OPCODE_BITMASK,
BRIG_TYPE_B32, "__hsail_bitmask_u32", BT_FN_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B64, BRIG_OPCODE_BITMASK,
BRIG_TYPE_B64, "__hsail_bitmask_u64", BT_FN_ULONG_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B32, BRIG_OPCODE_BITREV,
BRIG_TYPE_B32, "__hsail_bitrev_u32", BT_FN_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B64, BRIG_OPCODE_BITREV,
BRIG_TYPE_B64, "__hsail_bitrev_u64", BT_FN_ULONG_ULONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_B32, BRIG_OPCODE_BITSELECT,
BRIG_TYPE_B32, "__hsail_bitselect_u32",
- BT_FN_UINT_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_U64, BRIG_OPCODE_BITSELECT,
BRIG_TYPE_B64, "__hsail_bitselect_u64",
- BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U32, BRIG_OPCODE_FIRSTBIT,
BRIG_TYPE_U32, "__hsail_firstbit_u32", BT_FN_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S32, BRIG_OPCODE_FIRSTBIT,
BRIG_TYPE_S32, "__hsail_firstbit_s32", BT_FN_UINT_INT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U64, BRIG_OPCODE_FIRSTBIT,
BRIG_TYPE_U64, "__hsail_firstbit_u64", BT_FN_UINT_ULONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S64, BRIG_OPCODE_FIRSTBIT,
BRIG_TYPE_S64, "__hsail_firstbit_s64", BT_FN_UINT_LONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U32, BRIG_OPCODE_LASTBIT,
BRIG_TYPE_U32, "__hsail_lastbit_u32", BT_FN_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U64, BRIG_OPCODE_LASTBIT,
BRIG_TYPE_U64, "__hsail_lastbit_u64", BT_FN_UINT_ULONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U32, BRIG_OPCODE_BORROW,
BRIG_TYPE_U32, "__hsail_borrow_u32", BT_FN_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U64, BRIG_OPCODE_BORROW,
BRIG_TYPE_U64, "__hsail_borrow_u64", BT_FN_ULONG_ULONG_ULONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U32, BRIG_OPCODE_CARRY,
BRIG_TYPE_U32, "__hsail_carry_u32", BT_FN_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U64, BRIG_OPCODE_CARRY,
BRIG_TYPE_U64, "__hsail_carry_u64", BT_FN_ULONG_ULONG_ULONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S32, BRIG_OPCODE_REM,
BRIG_TYPE_S32, "__hsail_rem_s32", BT_FN_INT_INT_INT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S64, BRIG_OPCODE_REM,
BRIG_TYPE_S64, "__hsail_rem_s64", BT_FN_LONG_LONG_LONG,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F32, BRIG_OPCODE_MIN,
BRIG_TYPE_F32, "__hsail_min_f32", BT_FN_FLOAT_FLOAT_FLOAT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F32, BRIG_OPCODE_MAX,
BRIG_TYPE_F32, "__hsail_max_f32", BT_FN_FLOAT_FLOAT_FLOAT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F64, BRIG_OPCODE_MIN,
BRIG_TYPE_F64, "__hsail_min_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F64, BRIG_OPCODE_MAX,
BRIG_TYPE_F64, "__hsail_max_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32, BRIG_OPCODE_CLASS,
BRIG_TYPE_F32, "__hsail_class_f32", BT_FN_UINT_FLOAT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F64, BRIG_OPCODE_CLASS,
BRIG_TYPE_F64, "__hsail_class_f64", BT_FN_UINT_DOUBLE_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32_F16, BRIG_OPCODE_CLASS,
- BRIG_TYPE_F16, "__hsail_class_f32_f16", BT_FN_UINT_FLOAT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ BRIG_TYPE_F16, "__hsail_class_f32_f16",
+ BT_FN_UINT_FLOAT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F32, BRIG_OPCODE_FRACT,
BRIG_TYPE_F32, "__hsail_fract_f32", BT_FN_FLOAT_FLOAT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F64, BRIG_OPCODE_FRACT,
BRIG_TYPE_F64, "__hsail_fract_f64", BT_FN_DOUBLE_DOUBLE,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BARRIER, BRIG_OPCODE_BARRIER,
BRIG_TYPE_NONE, "__hsail_barrier", BT_FN_VOID_PTR,
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITALIGN, BRIG_OPCODE_BITALIGN,
BRIG_TYPE_B32, "__hsail_bitalign",
- BT_FN_UINT_ULONG_ULONG_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BYTEALIGN, BRIG_OPCODE_BYTEALIGN,
BRIG_TYPE_B32, "__hsail_bytealign",
- BT_FN_UINT_ULONG_ULONG_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LERP, BRIG_OPCODE_LERP,
BRIG_TYPE_U8X4, "__hsail_lerp", BT_FN_UINT_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKCVT, BRIG_OPCODE_PACKCVT,
BRIG_TYPE_U8X4, "__hsail_packcvt",
BT_FN_UINT_FLOAT_FLOAT_FLOAT_FLOAT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_UNPACKCVT, BRIG_OPCODE_UNPACKCVT,
BRIG_TYPE_F32, "__hsail_unpackcvt", BT_FN_FLOAT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U16X2, BRIG_OPCODE_SAD,
BRIG_TYPE_U16X2, "__hsail_sad_u16x2",
- BT_FN_UINT_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U32, BRIG_OPCODE_SAD,
BRIG_TYPE_U32, "__hsail_sad_u32", BT_FN_UINT_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U8X4, BRIG_OPCODE_SAD,
- BRIG_TYPE_U8X4, "__hsail_sad_u8x4", BT_FN_UINT_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ BRIG_TYPE_U8X4, "__hsail_sad_u8x4",
+ BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SADHI_U8X4, BRIG_OPCODE_SADHI,
BRIG_TYPE_U16X2, "__hsail_sadhi_u16x2_u8x4",
BT_FN_UINT_UINT_UINT_UINT,
- ATTR_PURE_NOTHROW_LEAF_LIST)
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLOCK, BRIG_OPCODE_CLOCK,
BRIG_TYPE_U64, "__hsail_clock", BT_FN_ULONG,
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U64, BRIG_OPCODE_ADD,
BRIG_TYPE_U64, "__hsail_sat_add_u64",
- BT_FN_ULONG_ULONG_ULONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S64, BRIG_OPCODE_ADD,
BRIG_TYPE_S64, "__hsail_sat_add_s64",
- BT_FN_LONG_LONG_LONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U32, BRIG_OPCODE_ADD,
BRIG_TYPE_U32, "__hsail_sat_add_u32",
- BT_FN_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S32, BRIG_OPCODE_ADD,
BRIG_TYPE_S32, "__hsail_sat_add_s32",
- BT_FN_INT_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U16, BRIG_OPCODE_ADD,
BRIG_TYPE_U16, "__hsail_sat_add_u16",
- BT_FN_UINT16_UINT16_UINT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S16, BRIG_OPCODE_ADD,
BRIG_TYPE_S16, "__hsail_sat_add_s16",
- BT_FN_INT16_INT16_INT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U8, BRIG_OPCODE_ADD,
BRIG_TYPE_U8, "__hsail_sat_add_u8",
- BT_FN_UINT8_UINT8_UINT8, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S8, BRIG_OPCODE_ADD,
BRIG_TYPE_S8, "__hsail_sat_add_s8",
- BT_FN_INT8_INT8_INT8, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U64, BRIG_OPCODE_SUB,
BRIG_TYPE_U64, "__hsail_sat_sub_u64",
- BT_FN_ULONG_ULONG_ULONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S64, BRIG_OPCODE_SUB,
BRIG_TYPE_S64, "__hsail_sat_sub_s64",
- BT_FN_LONG_LONG_LONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U32, BRIG_OPCODE_SUB,
BRIG_TYPE_U32, "__hsail_sat_sub_u32",
- BT_FN_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S32, BRIG_OPCODE_SUB,
BRIG_TYPE_S32, "__hsail_sat_sub_s32",
- BT_FN_INT_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U16, BRIG_OPCODE_SUB,
BRIG_TYPE_U16, "__hsail_sat_sub_u16",
- BT_FN_UINT16_UINT16_UINT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S16, BRIG_OPCODE_SUB,
BRIG_TYPE_S16, "__hsail_sat_sub_s16",
- BT_FN_INT16_INT16_INT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U8, BRIG_OPCODE_SUB,
BRIG_TYPE_U8, "__hsail_sat_sub_u8",
- BT_FN_UINT8_UINT8_UINT8, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S8, BRIG_OPCODE_SUB,
BRIG_TYPE_S8, "__hsail_sat_sub_s8",
- BT_FN_INT8_INT8_INT8, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U64, BRIG_OPCODE_MUL,
BRIG_TYPE_U64, "__hsail_sat_mul_u64",
- BT_FN_ULONG_ULONG_ULONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S64, BRIG_OPCODE_MUL,
BRIG_TYPE_S64, "__hsail_sat_mul_s64",
- BT_FN_LONG_LONG_LONG, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U32, BRIG_OPCODE_MUL,
BRIG_TYPE_U32, "__hsail_sat_mul_u32",
- BT_FN_UINT_UINT_UINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S32, BRIG_OPCODE_MUL,
BRIG_TYPE_S32, "__hsail_sat_mul_s32",
- BT_FN_INT_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U16, BRIG_OPCODE_MUL,
BRIG_TYPE_U16, "__hsail_sat_mul_u16",
- BT_FN_UINT16_UINT16_UINT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S16, BRIG_OPCODE_MUL,
BRIG_TYPE_S16, "__hsail_sat_mul_s16",
- BT_FN_INT16_INT16_INT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U8, BRIG_OPCODE_MUL,
BRIG_TYPE_U8, "__hsail_sat_mul_u8",
- BT_FN_UINT8_UINT8_UINT8, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S8, BRIG_OPCODE_MUL,
BRIG_TYPE_S8, "__hsail_sat_mul_s8",
- BT_FN_INT8_INT8_INT8, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
#ifndef DEF_HSAIL_INTR_BUILTIN
#define DEF_HSAIL_INTR_BUILTIN(ENUM, NAME, TYPE, ATTRS)
#endif
DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32_F16, "__hsail_ftz_f32_f16",
- BT_FN_FLOAT_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32, "__hsail_ftz_f32",
- BT_FN_FLOAT_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F64, "__hsail_ftz_f64",
- BT_FN_DOUBLE_DOUBLE, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_PUSH_FRAME, "__hsail_alloca_push_frame",
BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F32_TO_F16, "__hsail_f32_to_f16",
- BT_FN_UINT16_UINT32, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT16_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F16_TO_F32, "__hsail_f16_to_f32",
- BT_FN_UINT32_UINT16, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT32_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
#ifndef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
#define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DEST_TYPE, HSAIL_SRC_TYPE, \
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F32,
BRIG_TYPE_U8, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_u8_f32",
- BT_FN_UINT8_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT8_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F32,
BRIG_TYPE_S8, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_s8_f32",
- BT_FN_INT8_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F32,
BRIG_TYPE_U16, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_u16_f32",
- BT_FN_UINT16_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT16_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F32,
BRIG_TYPE_S16, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_s16_f32",
- BT_FN_INT16_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT16_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F32,
BRIG_TYPE_U32, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_u32_f32",
- BT_FN_UINT32_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT32_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F32,
BRIG_TYPE_S32, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_s32_f32",
- BT_FN_INT_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F32,
BRIG_TYPE_U64, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_u64_f32",
- BT_FN_UINT64_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT64_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F32,
BRIG_TYPE_S64, BRIG_TYPE_F32,
"__hsail_cvt_zeroi_sat_s64_f32",
- BT_FN_LONG_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F64,
BRIG_TYPE_U8, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_u8_f64",
- BT_FN_UINT8_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT8_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F64,
BRIG_TYPE_S8, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_s8_f64",
- BT_FN_INT8_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F64,
BRIG_TYPE_U16, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_u16_f64",
- BT_FN_UINT16_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT16_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F64,
BRIG_TYPE_S16, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_s16_f64",
- BT_FN_INT16_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT16_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F64,
BRIG_TYPE_U32, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_u32_f64",
- BT_FN_UINT32_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT32_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F64,
BRIG_TYPE_S32, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_s32_f64",
- BT_FN_INT_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F64,
BRIG_TYPE_U64, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_u64_f64",
- BT_FN_UINT64_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_UINT64_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F64,
BRIG_TYPE_S64, BRIG_TYPE_F64,
"__hsail_cvt_zeroi_sat_s64_f64",
- BT_FN_LONG_FLOAT, ATTR_PURE_NOTHROW_LEAF_LIST)
+ BT_FN_LONG_FLOAT,
+ ATTR_CONST_NOTHROW_LEAF_LIST)
#include "brig-c.h"
#include "brig-builtins.h"
+static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
+static tree handle_const_attribute (tree *, tree, tree, int, bool *);
+static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
+static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
+static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
+
/* This file is based on Go frontent'd go-lang.c and gogo-tree.cc. */
/* If -v set. */
opts->x_flag_finite_math_only = 0;
opts->x_flag_signed_zeros = 1;
+
+ opts->x_optimize = 3;
}
/* Handle Brig specific options. Return 0 if we didn't do anything. */
return identifier_to_locale (ident);
}
+/* Define supported attributes and their handlers. Code copied from
+ lto-lang.c */
+
+/* Table of machine-independent attributes supported in GIMPLE. */
+const struct attribute_spec brig_attribute_table[] =
+{
+ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+ do_diagnostic } */
+ { "leaf", 0, 0, true, false, false,
+ handle_leaf_attribute, false },
+ { "const", 0, 0, true, false, false,
+ handle_const_attribute, false },
+ { "pure", 0, 0, true, false, false,
+ handle_pure_attribute, false },
+ { "nothrow", 0, 0, true, false, false,
+ handle_nothrow_attribute, false },
+ { "returns_twice", 0, 0, true, false, false,
+ handle_returns_twice_attribute, false },
+ { NULL, 0, 0, false, false, false, NULL, false }
+};
+
+/* Attribute handlers. */
+/* Handle a "leaf" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_leaf_attribute (tree *node, tree name,
+ tree ARG_UNUSED (args),
+ int ARG_UNUSED (flags), bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+ if (!TREE_PUBLIC (*node))
+ {
+ warning (OPT_Wattributes,
+ "%qE attribute has no effect on unit local functions", name);
+ *no_add_attrs = true;
+ }
+
+ return NULL_TREE;
+}
+
+/* Handle a "const" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_const_attribute (tree *node, tree ARG_UNUSED (name),
+ tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ bool * ARG_UNUSED (no_add_attrs))
+{
+ tree type = TREE_TYPE (*node);
+
+ /* See FIXME comment on noreturn in c_common_attribute_table. */
+ if (TREE_CODE (*node) == FUNCTION_DECL)
+ TREE_READONLY (*node) = 1;
+ else if (TREE_CODE (type) == POINTER_TYPE
+ && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
+ TREE_TYPE (*node)
+ = build_pointer_type
+ (build_type_variant (TREE_TYPE (type), 1,
+ TREE_THIS_VOLATILE (TREE_TYPE (type))));
+ else
+ gcc_unreachable ();
+
+ return NULL_TREE;
+}
+
+/* Handle a "pure" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_pure_attribute (tree *node, tree ARG_UNUSED (name),
+ tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ bool * ARG_UNUSED (no_add_attrs))
+{
+ if (TREE_CODE (*node) == FUNCTION_DECL)
+ DECL_PURE_P (*node) = 1;
+ else
+ gcc_unreachable ();
+
+ return NULL_TREE;
+}
+
+/* Handle a "nothrow" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_nothrow_attribute (tree *node, tree ARG_UNUSED (name),
+ tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ bool * ARG_UNUSED (no_add_attrs))
+{
+ if (TREE_CODE (*node) == FUNCTION_DECL)
+ TREE_NOTHROW (*node) = 1;
+ else
+ gcc_unreachable ();
+
+ return NULL_TREE;
+}
+
+/* Handle a "returns_twice" attribute. */
+
+static tree
+handle_returns_twice_attribute (tree *node, tree ARG_UNUSED (name),
+ tree ARG_UNUSED (args),
+ int ARG_UNUSED (flags),
+ bool * ARG_UNUSED (no_add_attrs))
+{
+ gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
+
+ DECL_IS_RETURNS_TWICE (*node) = 1;
+
+ return NULL_TREE;
+}
+
+
/* Built-in initialization code cribbed from lto-lang.c which cribbed it
from c-common.c. */
#define LANG_HOOKS_GIMPLIFY_EXPR brig_langhook_gimplify_expr
#define LANG_HOOKS_EH_PERSONALITY brig_langhook_eh_personality
+/* Attribute hooks. */
+#undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
+#define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE brig_attribute_table
+
struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
#include "gt-brig-brig-lang.h"