hsail: disable asserts to allow immediate operands i.e. 0 with loads

This commit is contained in:
Brandon Potter 2016-12-02 18:01:58 -05:00
parent 900fd15622
commit 3d0a537862

View file

@ -317,14 +317,25 @@ AddrOperandBase::parseAddr(const BrigOperandAddress *op, const BrigObject *obj)
const BrigDirective *d = const BrigDirective *d =
(BrigDirective*)obj->getCodeSectionEntry(op->symbol); (BrigDirective*)obj->getCodeSectionEntry(op->symbol);
assert(d->kind == BRIG_KIND_DIRECTIVE_VARIABLE); /**
* HSAIL does not properly handle immediate offsets for instruction types
* that utilize them. It currently only supports instructions that use
* variables instead. Again, these pop up in code that is never executed
* (i.e. the HCC AMP codes) so we just hack it here to let us pass through
* the HSAIL object initialization. If such code is ever called, we would
* have to implement this properly.
*/
if (d->kind != BRIG_KIND_DIRECTIVE_VARIABLE) {
warn("HSAIL implementation does not support instructions with "
"address calculations where the operand is not a variable\n");
}
const BrigDirectiveVariable *sym = (BrigDirectiveVariable*)d; const BrigDirectiveVariable *sym = (BrigDirectiveVariable*)d;
name = obj->getString(sym->name); name = obj->getString(sym->name);
if (sym->segment != BRIG_SEGMENT_ARG) { if (sym->segment != BRIG_SEGMENT_ARG) {
storageElement = storageElement =
obj->currentCode->storageMap->findSymbol(sym->segment, name); obj->currentCode->storageMap->findSymbol(sym->segment, name);
assert(storageElement);
offset = 0; offset = 0;
} else { } else {
// sym->name does not work for BRIG_SEGMENT_ARG for the following case: // sym->name does not work for BRIG_SEGMENT_ARG for the following case: