index of the corresponding llvm fieldvar, as this index is a member
of the fieldvarsym that only gets initialised once the llvm shadow
symtable gets built, which in turn is triggered by trying to access
it for the first time -> if fieldvarsym.llvmfieldnr got loaded by
the compiler before evaluating the llvmst expression and if the
llvmst hadn't been built yet, this llvmfieldnr was not yet initialized
git-svn-id: trunk@31060 -
a single external symbol may be used with multiple declarations that
have different types:
o always declare an alias with the Pascal-mangled name that aliases the
external symbol, with the type of that Pascal declaration
o if the external symbol is not actually external but in the same unit,
we will determine the type of that symbol via its declaration and
insert type conversions in the alias declarations in case they use a
different type
o if it is external (so there is no declaration from which we can determine
its real type) and there are nevertheless multiple aliases for it with
different types, we just take the type of the first alias and insert
type conversions for the other aliases. LLVM will take care of the
conflicting types in multiple modules when performing WPO if necessary
git-svn-id: trunk@31054 -
gen_load_para_value(), as this may be different depending on
the calling conventions
* adapt llvm's gen_load_cgpara_loc() to use this passed def rather
than hardcoding the para's def (although these will normally match)
git-svn-id: trunk@31050 -
alias for another symbol with a different type (such as
FPC_ANSISTR_UNIQUE, which is defined as a function and referenced as a
procedure)
git-svn-id: trunk@30781 -
as an alias for the old one (rather than creating an interprocedural
jump, which is not possible in llvm IR and which is less efficient
anyway) (declaration for this method was already accidentally committed
in r30722)
git-svn-id: trunk@30777 -
because due to aliasing symbols a single symbol may be called using
different procdefs (e.g. FPC_ANSISTR_UNIQUE in the system unit is defined
as an alias for a function and called as a procedure). This means we have
to insert extra type conversions for llvm, which requires both the source
and destination type
git-svn-id: trunk@30776 -
for llvm in order to ensure that it doesn't allocate the ABI-specified
size, we have to convert the resulting pointer to an array of 10 bytes
into a pointer to extended when we subscript the record (like is already
done for arrays)
git-svn-id: trunk@30720 -
for function results and parameters (they're not in an aggregate, and this
caused 80 bits extended floating point types to be translated into arrays
of 10 bytes, which have different ABI meanings)
git-svn-id: trunk@30714 -
handle recursive record references (rec= record prec: ^rec)
o llvm unfortunately does not support recursive references to array types
or function pointers, so those will currently still result in endless
recursion when the compiler tries to write them out. Solving those
will require a lot of typecasting in the generated code
git-svn-id: trunk@30675 -
assembler writer, and for now skip writing labels if we are (they
will have to emitted as part of an actual inline assembly block,
not as llvm-style labels)
git-svn-id: trunk@30672 -
assembler function, as the inline assembly code itself will be
responsible for returning the function result (we will have to add
the "return" instruction to it) while llvm requires a terminator
at the end of the function and it must return something
git-svn-id: trunk@30671 -
constants on llvm, as you can only compare with "null" in that case
* convert all arguments to integers in case of pointer subtractions,
as pointer subtractions are not supported by llvm
git-svn-id: trunk@30485 -