Changeset 3905


Ignore:
Timestamp:
Jun 30, 2014, 10:36:54 PM (5 years ago)
Author:
linmengl
Message:

add float vector support for getTypeForEVT, fix wide integer

Location:
parabix-LLVM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • parabix-LLVM/ValueTypes.cpp.pytemplate

    r3904 r3905  
    1818#include "llvm/IR/Type.h"
    1919#include "llvm/Support/ErrorHandling.h"
     20#include "llvm/Support/Debug.h"
    2021using namespace llvm;
    2122
     
    181182  switch (V.SimpleTy) {
    182183  default:
     184    dbgs() << "EVT String: " << getEVTString() << '\n';
    183185    assert(isExtended() && "Type is not extended!");
    184186    return LLVMTy;
    185187  case MVT::isVoid:  return Type::getVoidTy(Context);
    186188  case MVT::i1:      return Type::getInt1Ty(Context);
     189  case MVT::i2:      return Type::getIntNTy(Context, 2);
     190  case MVT::i4:      return Type::getIntNTy(Context, 4);
    187191  case MVT::i8:      return Type::getInt8Ty(Context);
    188192  case MVT::i16:     return Type::getInt16Ty(Context);
     
    190194  case MVT::i64:     return Type::getInt64Ty(Context);
    191195  case MVT::i128:    return IntegerType::get(Context, 128);
     196  case MVT::i256:    return IntegerType::get(Context, 256);
     197  case MVT::i512:    return IntegerType::get(Context, 512);
     198  case MVT::i1024:   return IntegerType::get(Context, 1024);
    192199  case MVT::f16:     return Type::getHalfTy(Context);
    193200  case MVT::f32:     return Type::getFloatTy(Context);
     
    200207${get_type_for_vector_EVT}
    201208
    202   case MVT::v2f16:   return VectorType::get(Type::getHalfTy(Context), 2);
    203   case MVT::v4f16:   return VectorType::get(Type::getHalfTy(Context), 4);
    204   case MVT::v8f16:   return VectorType::get(Type::getHalfTy(Context), 8);
    205   case MVT::v1f32:   return VectorType::get(Type::getFloatTy(Context), 1);
    206   case MVT::v2f32:   return VectorType::get(Type::getFloatTy(Context), 2);
    207   case MVT::v4f32:   return VectorType::get(Type::getFloatTy(Context), 4);
    208   case MVT::v8f32:   return VectorType::get(Type::getFloatTy(Context), 8);
    209   case MVT::v16f32:   return VectorType::get(Type::getFloatTy(Context), 16);
    210   case MVT::v1f64:   return VectorType::get(Type::getDoubleTy(Context), 1);
    211   case MVT::v2f64:   return VectorType::get(Type::getDoubleTy(Context), 2);
    212   case MVT::v4f64:   return VectorType::get(Type::getDoubleTy(Context), 4);
    213   case MVT::v8f64:   return VectorType::get(Type::getDoubleTy(Context), 8);
    214209  case MVT::Metadata: return Type::getMetadataTy(Context);
    215210 }
  • parabix-LLVM/cp_to_place.sh

    r3904 r3905  
    11#! /bin/bash
     2python mkValueTypes.py
     3
    24LLVM_ROOT=~/llvm_suit/llvm_git
    35CodeGen_Folder=$LLVM_ROOT/include/llvm/CodeGen/
  • parabix-LLVM/mkValueTypes.py

    r3904 r3905  
    293293            num_elt = getNumElement(tpname)
    294294            fieldtype = bitwidth / num_elt
     295            res += "  case MVT::{0}:   return VectorType::get(Type::".format(tpname)
    295296            if fieldtype > 64 or fieldtype == 2 or fieldtype == 4:
     297                res += "getIntNTy(Context, {0})".format(fieldtype)
     298            else:
     299                res += "getInt{0}Ty(Context)".format(fieldtype)
     300            res += ", {0});\n".format(num_elt)
     301
     302    res += "\n"
     303
     304    for bitwidth in sorted(VectorSizeMap.keys()):
     305        for tpname in VectorSizeMap[bitwidth]:
     306            if 'f' not in tpname:
     307                # only works on integer vectors
    296308                continue
    297             res += "  case MVT::{tpname}:   return VectorType::get(Type::getInt{fieldtype}Ty(Context), {num_elt});\n".format(
    298                     **{'tpname': tpname, 'fieldtype': fieldtype, 'num_elt': num_elt});
     309            num_elt = getNumElement(tpname)
     310            fieldtype = bitwidth / num_elt
     311            res += "  case MVT::{0}:   return VectorType::get(Type::".format(tpname)
     312            if fieldtype == 16:
     313                res += "getHalfTy"
     314            elif fieldtype == 32:
     315                res += "getFloatTy"
     316            elif fieldtype == 64:
     317                res += "getDoubleTy"
     318            else:
     319                raise Exception("Invalid float type for getTypeForEVT")
     320            res += "(Context), {0});\n".format(num_elt)
     321
    299322    return res
    300323
Note: See TracChangeset for help on using the changeset viewer.