Files
swift-mirror/lib/IRGen/GenPoly.h
Joe Groff a60a52d72e SIL: Add a "builtin" instruction to represent builtin invocations.
Modeling builtins as first-class function values doesn't really make sense because there's no real function value to emit, and modeling them this way complicates passes that work with builtins because they have to invent function types for builtin invocations. It's much more straightforward to have a single instruction that references the builtin by ID, along with the type information for the necessary values, type parameters, and results, so add a new "builtin" instruction that directly represents a builtin invocation. NFC yet.

Swift SVN r22690
2014-10-11 20:34:24 +00:00

60 lines
2.0 KiB
C++

//===--- GenPoly.h - Swift IR generation for polymorphism -------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// This file provides the private interface to the code for translating
// between polymorphic and monomorphic values.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_IRGEN_GENPOLY_H
#define SWIFT_IRGEN_GENPOLY_H
namespace llvm {
class Type;
template <class T> class ArrayRef;
}
namespace swift {
class CanType;
class Substitution;
namespace irgen {
class Explosion;
class IRGenFunction;
class IRGenModule;
/// Do the given types differ by abstraction when laid out as memory?
bool differsByAbstractionInMemory(IRGenModule &IGM,
CanType origTy, CanType substTy);
/// Do the given types differ by abstraction when passed in an explosion?
bool differsByAbstractionInExplosion(IRGenModule &IGM,
CanType origTy, CanType substTy);
/// Given a substituted explosion, re-emit it as an unsubstituted one.
///
/// For example, given an explosion which begins with the
/// representation of an (Int, Float), consume that and produce the
/// representation of an (Int, T).
///
/// The substitutions must carry origTy to substTy.
void reemitAsUnsubstituted(IRGenFunction &IGF,
SILType origTy, SILType substTy,
Explosion &src, Explosion &dest);
/// True if a function's signature in LLVM carries polymorphic parameters.
bool hasPolymorphicParameters(CanSILFunctionType ty);
} // end namespace irgen
} // end namespace swift
#endif