Skip to content

Commit

Permalink
Moved "inlineAsm" rule in LLVM grammar from value to call.
Browse files Browse the repository at this point in the history
Updated VisitorLlvm to skip all inline assembly calls.
  • Loading branch information
ThomasHaas committed Aug 5, 2023
1 parent 553db5c commit a41321a
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 14 deletions.
7 changes: 2 additions & 5 deletions dartagnan/src/main/antlr4/LLVMIR.g4
Original file line number Diff line number Diff line change
Expand Up @@ -304,10 +304,7 @@ typeValue: firstClassType value;
value:
constant
// %42 %foo
| LocalIdent
// TODO: Move InlineAsm from Value to Callee and Invokee? Inline assembler expressions may only
// be used as the callee operand of a call or an invoke instruction.
| inlineAsm;
| LocalIdent;
inlineAsm:
'asm' sideEffect = 'sideeffect'? alignStackTok = 'alignstack'? intelDialect = 'inteldialect'?
unwind = 'unwind'? StringLit ',' StringLit;
Expand Down Expand Up @@ -705,7 +702,7 @@ selectInst:
freezeInst: 'freeze' typeValue;
callInst:
tail = ('musttail' | 'notail' | 'tail')? 'call' fastMathFlag* callingConv? returnAttribute*
addrSpace? type value '(' args ')' funcAttribute* (
addrSpace? type (inlineAsm | value) '(' args ')' funcAttribute* (
'[' operandBundle (',' operandBundle)* ']'
)? (',' metadataAttachment)*;
vaargInst:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,27 @@
import com.dat3m.dartagnan.expression.IConst;
import com.dat3m.dartagnan.expression.INonDet;
import com.dat3m.dartagnan.expression.op.IOpBin;
import com.dat3m.dartagnan.expression.type.AggregateType;
import com.dat3m.dartagnan.expression.type.FunctionType;
import com.dat3m.dartagnan.expression.type.IntegerType;
import com.dat3m.dartagnan.expression.type.Type;
import com.dat3m.dartagnan.expression.type.TypeFactory;
import com.dat3m.dartagnan.expression.type.VoidType;
import com.dat3m.dartagnan.expression.type.*;
import com.dat3m.dartagnan.parsers.LLVMIRBaseVisitor;
import com.dat3m.dartagnan.parsers.LLVMIRParser.*;
import com.dat3m.dartagnan.parsers.program.utils.ProgramBuilder;
import com.dat3m.dartagnan.program.Function;
import com.dat3m.dartagnan.program.Program;
import com.dat3m.dartagnan.program.Register;
import com.dat3m.dartagnan.program.event.Tag;
import com.dat3m.dartagnan.program.event.core.*;
import com.dat3m.dartagnan.program.event.core.Event;
import com.dat3m.dartagnan.program.event.core.Label;
import com.dat3m.dartagnan.program.memory.Memory;
import com.dat3m.dartagnan.program.memory.MemoryObject;
import com.dat3m.dartagnan.program.processing.GEPToAddition;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.TerminalNode;

import java.math.BigInteger;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.dat3m.dartagnan.program.event.EventFactory.*;
import static com.dat3m.dartagnan.program.event.EventFactory.Llvm.newCompareExchange;
Expand Down Expand Up @@ -271,6 +270,10 @@ public Expression visitCondBrTerm(CondBrTermContext ctx) {
@Override
public Expression visitCallInst(CallInstContext ctx) {
final Type returnType = parseType(ctx.type());
if (ctx.inlineAsm() != null) {
// FIXME: We ignore all inline assembly.
return null;
}
final Expression callTarget = checkPointerExpression(ctx.value());
if (callTarget == null) {
//FIXME ignores metadata functions, but also undeclared functions
Expand Down Expand Up @@ -694,7 +697,6 @@ public Expression visitValue(ValueContext ctx) {
if (ctx.constant() != null) {
return visitConstant(ctx.constant());
}
checkSupport(ctx.inlineAsm() == null, "Assembly values in %s.", ctx);
assert expectedType != null : "No expected type.";
final String id = localIdent(ctx.LocalIdent());
return getOrNewRegister(id, expectedType);
Expand Down

0 comments on commit a41321a

Please sign in to comment.