mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-03 14:21:30 +00:00
reapply the patches reverted in r149470 that reenable ConstantDataArray,
but with a critical fix to the SelectionDAG code that optimizes copies from strings into immediate stores: the previous code was stopping reading string data at the first nul. Address this by adding a new argument to llvm::getConstantStringInfo, preserving the behavior before the patch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149800 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -17,14 +17,13 @@
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
template <typename T> class SmallVectorImpl;
|
||||
class Value;
|
||||
class Instruction;
|
||||
class APInt;
|
||||
class TargetData;
|
||||
class StringRef;
|
||||
|
||||
/// ComputeMaskedBits - Determine which of the bits specified in Mask are
|
||||
/// known to be either zero or one and return them in the KnownZero/KnownOne
|
||||
@@ -125,16 +124,15 @@ namespace llvm {
|
||||
return GetPointerBaseWithConstantOffset(const_cast<Value*>(Ptr), Offset,TD);
|
||||
}
|
||||
|
||||
/// GetConstantStringInfo - This function computes the length of a
|
||||
/// getConstantStringInfo - This function computes the length of a
|
||||
/// null-terminated C string pointed to by V. If successful, it returns true
|
||||
/// and returns the string in Str. If unsuccessful, it returns false. If
|
||||
/// StopAtNul is set to true (the default), the returned string is truncated
|
||||
/// by a nul character in the global. If StopAtNul is false, the nul
|
||||
/// character is included in the result string.
|
||||
bool GetConstantStringInfo(const Value *V, std::string &Str,
|
||||
uint64_t Offset = 0,
|
||||
bool StopAtNul = true);
|
||||
|
||||
/// and returns the string in Str. If unsuccessful, it returns false. This
|
||||
/// does not include the trailing nul character by default. If TrimAtNul is
|
||||
/// set to false, then this returns any trailing nul characters as well as any
|
||||
/// other characters that come after it.
|
||||
bool getConstantStringInfo(const Value *V, StringRef &Str,
|
||||
uint64_t Offset = 0, bool TrimAtNul = true);
|
||||
|
||||
/// GetStringLength - If we can compute the length of the string pointed to by
|
||||
/// the specified pointer, return 'len+1'. If we can't, return 0.
|
||||
uint64_t GetStringLength(Value *V);
|
||||
|
||||
@@ -352,17 +352,6 @@ public:
|
||||
// ConstantArray accessors
|
||||
static Constant *get(ArrayType *T, ArrayRef<Constant*> V);
|
||||
|
||||
/// This method constructs a ConstantArray and initializes it with a text
|
||||
/// string. The default behavior (AddNull==true) causes a null terminator to
|
||||
/// be placed at the end of the array. This effectively increases the length
|
||||
/// of the array by one (you've been warned). However, in some situations
|
||||
/// this is not desired so if AddNull==false then the string is copied without
|
||||
/// null termination.
|
||||
|
||||
// FIXME Remove this.
|
||||
static Constant *get(LLVMContext &Context, StringRef Initializer,
|
||||
bool AddNull = true);
|
||||
|
||||
/// Transparently provide more efficient getOperand methods.
|
||||
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant);
|
||||
|
||||
@@ -373,31 +362,6 @@ public:
|
||||
return reinterpret_cast<ArrayType*>(Value::getType());
|
||||
}
|
||||
|
||||
// FIXME: String methods will eventually be removed.
|
||||
|
||||
|
||||
/// isString - This method returns true if the array is an array of i8 and
|
||||
/// the elements of the array are all ConstantInt's.
|
||||
bool isString() const;
|
||||
|
||||
/// isCString - This method returns true if the array is a string (see
|
||||
/// @verbatim
|
||||
/// isString) and it ends in a null byte \0 and does not contains any other
|
||||
/// @endverbatim
|
||||
/// null bytes except its terminator.
|
||||
bool isCString() const;
|
||||
|
||||
/// getAsString - If this array is isString(), then this method converts the
|
||||
/// array to an std::string and returns it. Otherwise, it asserts out.
|
||||
///
|
||||
std::string getAsString() const;
|
||||
|
||||
/// getAsCString - If this array is isCString(), then this method converts the
|
||||
/// array (without the trailing null byte) to an std::string and returns it.
|
||||
/// Otherwise, it asserts out.
|
||||
///
|
||||
std::string getAsCString() const;
|
||||
|
||||
virtual void destroyConstant();
|
||||
virtual void replaceUsesOfWithOnConstant(Value *From, Value *To, Use *U);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user