aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mlir/lib/Target/LLVMIR/ModuleTranslation.cpp')
-rw-r--r--mlir/lib/Target/LLVMIR/ModuleTranslation.cpp52
1 files changed, 25 insertions, 27 deletions
diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 2acbd03..64e3c5f 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -649,40 +649,38 @@ llvm::Constant *mlir::LLVM::detail::getLLVMConstant(
auto *arrayType = llvm::ArrayType::get(elementType, numElements);
if (child->isZeroValue() && !elementType->isFPOrFPVectorTy()) {
return llvm::ConstantAggregateZero::get(arrayType);
- } else {
- if (llvm::ConstantDataSequential::isElementTypeCompatible(
- elementType)) {
- // TODO: Handle all compatible types. This code only handles integer.
- if (isa<llvm::IntegerType>(elementType)) {
- if (llvm::ConstantInt *ci = dyn_cast<llvm::ConstantInt>(child)) {
- if (ci->getBitWidth() == 8) {
- SmallVector<int8_t> constants(numElements, ci->getZExtValue());
- return llvm::ConstantDataArray::get(elementType->getContext(),
- constants);
- }
- if (ci->getBitWidth() == 16) {
- SmallVector<int16_t> constants(numElements, ci->getZExtValue());
- return llvm::ConstantDataArray::get(elementType->getContext(),
- constants);
- }
- if (ci->getBitWidth() == 32) {
- SmallVector<int32_t> constants(numElements, ci->getZExtValue());
- return llvm::ConstantDataArray::get(elementType->getContext(),
- constants);
- }
- if (ci->getBitWidth() == 64) {
- SmallVector<int64_t> constants(numElements, ci->getZExtValue());
- return llvm::ConstantDataArray::get(elementType->getContext(),
- constants);
- }
+ }
+ if (llvm::ConstantDataSequential::isElementTypeCompatible(elementType)) {
+ // TODO: Handle all compatible types. This code only handles integer.
+ if (isa<llvm::IntegerType>(elementType)) {
+ if (llvm::ConstantInt *ci = dyn_cast<llvm::ConstantInt>(child)) {
+ if (ci->getBitWidth() == 8) {
+ SmallVector<int8_t> constants(numElements, ci->getZExtValue());
+ return llvm::ConstantDataArray::get(elementType->getContext(),
+ constants);
+ }
+ if (ci->getBitWidth() == 16) {
+ SmallVector<int16_t> constants(numElements, ci->getZExtValue());
+ return llvm::ConstantDataArray::get(elementType->getContext(),
+ constants);
+ }
+ if (ci->getBitWidth() == 32) {
+ SmallVector<int32_t> constants(numElements, ci->getZExtValue());
+ return llvm::ConstantDataArray::get(elementType->getContext(),
+ constants);
+ }
+ if (ci->getBitWidth() == 64) {
+ SmallVector<int64_t> constants(numElements, ci->getZExtValue());
+ return llvm::ConstantDataArray::get(elementType->getContext(),
+ constants);
}
}
}
+ }
// std::vector is used here to accomodate large number of elements that
// exceed SmallVector capacity.
std::vector<llvm::Constant *> constants(numElements, child);
return llvm::ConstantArray::get(arrayType, constants);
- }
}
}