[llvm-commits] [llvm] r79213 - in /llvm/trunk: include/llvm-c/Core.h lib/VMCore/Core.cpp
Erick Tryzelaar
idadesub at users.sourceforge.net
Sun Aug 16 16:36:46 PDT 2009
Author: erickt
Date: Sun Aug 16 18:36:46 2009
New Revision: 79213
URL: http://llvm.org/viewvc/llvm-project?rev=79213&view=rev
Log:
Expose creating constant ints and floats from strings in llvm-c.
Modified:
llvm/trunk/include/llvm-c/Core.h
llvm/trunk/lib/VMCore/Core.cpp
Modified: llvm/trunk/include/llvm-c/Core.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=79213&r1=79212&r2=79213&view=diff
==============================================================================
--- llvm/trunk/include/llvm-c/Core.h (original)
+++ llvm/trunk/include/llvm-c/Core.h Sun Aug 16 18:36:46 2009
@@ -33,6 +33,8 @@
#ifndef LLVM_C_CORE_H
#define LLVM_C_CORE_H
+#include "llvm/Support/DataTypes.h"
+
#ifdef __cplusplus
/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
@@ -435,8 +437,15 @@
/* Operations on scalar constants */
LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
int SignExtend);
+LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
+ uint8_t Radix);
+LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
+ unsigned SLen, uint8_t Radix);
LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
+LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
+ unsigned SLen);
+
/* Operations on composite constants */
LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
Modified: llvm/trunk/lib/VMCore/Core.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Core.cpp?rev=79213&r1=79212&r2=79213&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Core.cpp (original)
+++ llvm/trunk/lib/VMCore/Core.cpp Sun Aug 16 18:36:46 2009
@@ -440,32 +440,29 @@
return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), N, SignExtend != 0));
}
-static const fltSemantics &SemanticsForType(Type *Ty) {
- assert(Ty->isFloatingPoint() && "Type is not floating point!");
- if (Ty == Type::getFloatTy(Ty->getContext()))
- return APFloat::IEEEsingle;
- if (Ty == Type::getDoubleTy(Ty->getContext()))
- return APFloat::IEEEdouble;
- if (Ty == Type::getX86_FP80Ty(Ty->getContext()))
- return APFloat::x87DoubleExtended;
- if (Ty == Type::getFP128Ty(Ty->getContext()))
- return APFloat::IEEEquad;
- if (Ty == Type::getPPC_FP128Ty(Ty->getContext()))
- return APFloat::PPCDoubleDouble;
- return APFloat::Bogus;
+LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char Str[],
+ uint8_t Radix) {
+ return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str),
+ Radix));
+}
+
+LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char Str[],
+ unsigned SLen, uint8_t Radix) {
+ return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str, SLen),
+ Radix));
}
LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) {
- APFloat APN(N);
- bool ignored;
- APN.convert(SemanticsForType(unwrap(RealTy)), APFloat::rmNearestTiesToEven,
- &ignored);
- return wrap(ConstantFP::get(getGlobalContext(), APN));
+ return wrap(ConstantFP::get(unwrap(RealTy), N));
}
LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text) {
- return wrap(ConstantFP::get(getGlobalContext(),
- APFloat(SemanticsForType(unwrap(RealTy)), Text)));
+ return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Text)));
+}
+
+LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char Str[],
+ unsigned SLen) {
+ return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Str, SLen)));
}
/*--.. Operations on composite constants ...................................--*/
More information about the llvm-commits
mailing list