[hsa/69568] Fix ld instruction type for packed data
2016-02-26 Martin Jambor <mjambor@suse.cz> PR hsa/69568 * hsa.h (hsa_type_packed_p): Declare. * hsa.c (hsa_type_packed_p): New function. * hsa-gen.c (mem_type_for_type): Use unsigned type for packed loads. (gen_hsa_insns_for_store): Use hsa_type_packed_p. * hsa-brig.c (emit_basic_insn): Likewise. From-SVN: r233751
This commit is contained in:
parent
de0fef0dd4
commit
27d39ae1cc
|
@ -1,3 +1,13 @@
|
|||
2016-02-26 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR hsa/69568
|
||||
* hsa.h (hsa_type_packed_p): Declare.
|
||||
* hsa.c (hsa_type_packed_p): New function.
|
||||
* hsa-gen.c (mem_type_for_type): Use unsigned type for packed
|
||||
loads.
|
||||
(gen_hsa_insns_for_store): Use hsa_type_packed_p.
|
||||
* hsa-brig.c (emit_basic_insn): Likewise.
|
||||
|
||||
2016-02-26 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
pr hsa/69674
|
||||
|
|
|
@ -1803,7 +1803,7 @@ emit_basic_insn (hsa_insn_basic *insn)
|
|||
repr.base.type = lendian16 (type);
|
||||
repr.base.operands = lendian32 (emit_insn_operands (insn));
|
||||
|
||||
if ((type & BRIG_TYPE_PACK_MASK) != BRIG_TYPE_PACK_NONE)
|
||||
if (hsa_type_packed_p (type))
|
||||
{
|
||||
if (hsa_type_float_p (type)
|
||||
&& !hsa_opcode_floating_bit_insn_p (insn->m_opcode))
|
||||
|
|
|
@ -754,11 +754,13 @@ mem_type_for_type (BrigType16_t type)
|
|||
unsigned type?). */
|
||||
if ((type & BRIG_TYPE_PACK_MASK) == BRIG_TYPE_PACK_128)
|
||||
return BRIG_TYPE_B128;
|
||||
else if (hsa_btype_p (type))
|
||||
else if (hsa_btype_p (type) || hsa_type_packed_p (type))
|
||||
{
|
||||
unsigned bitsize = hsa_type_bit_size (type);
|
||||
if (bitsize < 128)
|
||||
return hsa_uint_for_bitsize (bitsize);
|
||||
else
|
||||
return hsa_bittype_for_bitsize (bitsize);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
@ -2648,7 +2650,7 @@ gen_hsa_insns_for_store (tree lhs, hsa_op_base *src, hsa_bb *hbb)
|
|||
we can modify the above in place. */
|
||||
if (hsa_op_immed *imm = dyn_cast <hsa_op_immed *> (src))
|
||||
{
|
||||
if ((imm->m_type & BRIG_TYPE_PACK_MASK) == BRIG_TYPE_PACK_NONE)
|
||||
if (!hsa_type_packed_p (imm->m_type))
|
||||
imm->m_type = mem->m_type;
|
||||
else
|
||||
{
|
||||
|
|
|
@ -480,6 +480,14 @@ hsa_unsigned_type_for_type (BrigType16_t t)
|
|||
return hsa_uint_for_bitsize (hsa_type_bit_size (t));
|
||||
}
|
||||
|
||||
/* Return true if TYPE is a packed HSA type. */
|
||||
|
||||
bool
|
||||
hsa_type_packed_p (BrigType16_t type)
|
||||
{
|
||||
return (type & BRIG_TYPE_PACK_MASK) != BRIG_TYPE_PACK_NONE;
|
||||
}
|
||||
|
||||
/* Return true if and only if TYPE is a floating point number type. */
|
||||
|
||||
bool
|
||||
|
|
|
@ -1338,6 +1338,7 @@ BrigType16_t hsa_uint_for_bitsize (unsigned bitsize);
|
|||
BrigType16_t hsa_float_for_bitsize (unsigned bitsize);
|
||||
BrigType16_t hsa_bittype_for_type (BrigType16_t t);
|
||||
BrigType16_t hsa_unsigned_type_for_type (BrigType16_t t);
|
||||
bool hsa_type_packed_p (BrigType16_t type);
|
||||
bool hsa_type_float_p (BrigType16_t type);
|
||||
bool hsa_type_integer_p (BrigType16_t type);
|
||||
bool hsa_btype_p (BrigType16_t type);
|
||||
|
|
Loading…
Reference in New Issue