Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Integration of RKQC with the GenRKQC Pass, Makefile Additions, and Ne…
…w Scripts
  • Loading branch information
ah744 committed Jul 10, 2016
1 parent 6ab4b34 commit fb82d6a
Show file tree
Hide file tree
Showing 66 changed files with 3,042 additions and 36,038 deletions.
640 changes: 640 additions & 0 deletions Algorithms/SHA-1/sha1_n128_rkqc.scaffold

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions build.sh
@@ -0,0 +1,6 @@
#!/bin/bash

cd rkqc/
./build.sh
cd ../
make
5 changes: 5 additions & 0 deletions clang/include/clang/AST/ASTContext.h
Expand Up @@ -572,6 +572,11 @@ class ASTContext : public RefCountedBase<ASTContext> {
CanQualType ObjCBuiltinBoolTy;
CanQualType CbitTy;
CanQualType QbitTy;
CanQualType QintTy;
CanQualType zzBitTy;
CanQualType zgBitTy;
CanQualType ooBitTy;
CanQualType ogBitTy;

// Types for deductions in C++0x [stmt.ranged]'s desugaring. Built on demand.
mutable QualType AutoDeductTy; // Deduction against 'auto'.
Expand Down
9 changes: 9 additions & 0 deletions clang/include/clang/AST/BuiltinTypes.def
Expand Up @@ -99,6 +99,15 @@ UNSIGNED_TYPE(Cbit, CbitTy)
// 'qbit' in Scaffold (added similar to bool)
UNSIGNED_TYPE(Qbit, QbitTy)

// 'qint' in RKQC
UNSIGNED_TYPE(Qint, QintTy)

// 'ancilla' in RKQC
UNSIGNED_TYPE(zzBit, zzBitTy)
UNSIGNED_TYPE(zgBit, zgBitTy)
UNSIGNED_TYPE(ooBit, ooBitTy)
UNSIGNED_TYPE(ogBit, ogBitTy)


//===- Signed Types -------------------------------------------------------===//

Expand Down
13 changes: 13 additions & 0 deletions clang/include/clang/Basic/Builtins.def
Expand Up @@ -106,6 +106,19 @@ BUILTIN(MeasZ , "lq" , "")
BUILTIN(Toffoli , "vqqq" , "")
BUILTIN(Fredkin , "vqqq" , "")

// RKQC builtin gates:
BUILTIN(cnot , "vyy" , "")
BUILTIN(toffoli , "vyyy" , "")
BUILTIN(NOT , "vy" , "")
BUILTIN(assign_value_of_b_to_a , "vyyi" , "")
BUILTIN(assign_value_of_int_to_a , "vyii" , "")
BUILTIN(a_eq_a_plus_b , "vyyi" , "")
BUILTIN(a_eq_a_minus_b , "vyyi" , "")
BUILTIN(a_eq_a_plus_b_times_c , "vyyyi" , "")
BUILTIN(a_swap_b , "vyyi" , "")



// Standard libc/libm functions:
BUILTIN(__builtin_atan2 , "ddd" , "Fnc")
BUILTIN(__builtin_atan2f, "fff" , "Fnc")
Expand Down
4 changes: 2 additions & 2 deletions clang/include/clang/Basic/DiagnosticParseKinds.td
Expand Up @@ -707,8 +707,8 @@ def err_seh___finally_block : Error<
"%0 only allowed in __finally block">;

// Scaffold
def err_typename_qint : Error<
"qint is allowed inside ctqg only">;
//def err_typename_qint : Error<
// "qint is allowed inside rkqc only">;

} // end of Parse Issue category.

Expand Down
10 changes: 9 additions & 1 deletion clang/include/clang/Basic/Specifiers.h
Expand Up @@ -66,7 +66,15 @@ namespace clang {
TST_cbit,
TST_qbit,
TST_qstruct,
TST_qunion
TST_qunion,

// RKQC additions
TST_qint,
TST_zero_to_zero,
TST_zero_to_garbage,
TST_one_to_one,
TST_one_to_garbage

};

/// WrittenBuiltinSpecs - Structure that packs information about the
Expand Down
6 changes: 6 additions & 0 deletions clang/include/clang/Basic/TargetInfo.h
Expand Up @@ -71,6 +71,7 @@ class TargetInfo : public RefCountedBase<TargetInfo> {
unsigned char BoolWidth, BoolAlign;
unsigned char CbitWidth, CbitAlign; // Scaffold
unsigned char QbitWidth, QbitAlign; // Scaffold
unsigned char QintWidth, QintAlign; // RKQC
unsigned char IntWidth, IntAlign;
unsigned char HalfWidth, HalfAlign;
unsigned char FloatWidth, FloatAlign;
Expand Down Expand Up @@ -238,6 +239,11 @@ class TargetInfo : public RefCountedBase<TargetInfo> {
unsigned getQbitWidth() const { return 16; }
unsigned getQbitAlign() const { return 16; }

/// \brief Return RKQC Qint type width and Align.
unsigned getQintWidth() const { return 16; }
unsigned getQintAlign() const { return 16; }



/// getChar16Width/Align - Return the size of 'char16_t' for this target, in
/// bits.
Expand Down
6 changes: 5 additions & 1 deletion clang/include/clang/Basic/TokenKinds.def
Expand Up @@ -269,8 +269,12 @@ KEYWORD(__objc_no , KEYALL)
KEYWORD(cbit , KEYSCAF)
KEYWORD(qbit , KEYSCAF)
KEYWORD(qint , KEYSCAF)
KEYWORD(zero_to_zero , KEYSCAF)
KEYWORD(zero_to_garbage , KEYSCAF)
KEYWORD(one_to_one , KEYSCAF)
KEYWORD(one_to_garbage , KEYSCAF)
KEYWORD(module , KEYSCAF)
KEYWORD(ctqg , KEYSCAF)
KEYWORD(rkqc , KEYSCAF)
KEYWORD(qstruct , KEYSCAF)
KEYWORD(qunion , KEYSCAF)

Expand Down
7 changes: 7 additions & 0 deletions clang/include/clang/Sema/DeclSpec.h
Expand Up @@ -272,6 +272,13 @@ class DeclSpec {
static const TST TST_qstruct = clang::TST_qstruct;
static const TST TST_qunion = clang::TST_qunion;

// RKQC types
static const TST TST_qint = clang::TST_qint;
static const TST TST_zero_to_zero = clang::TST_zero_to_zero;
static const TST TST_zero_to_garbage = clang::TST_zero_to_garbage;
static const TST TST_one_to_one = clang::TST_one_to_one;
static const TST TST_one_to_garbage = clang::TST_one_to_garbage;

// type-qualifiers
enum TQ { // NOTE: These flags must be kept in sync with Qualifiers::TQ.
TQ_unspecified = 0,
Expand Down
8 changes: 7 additions & 1 deletion clang/include/clang/Serialization/ASTBitCodes.h
Expand Up @@ -636,7 +636,13 @@ namespace clang {
/// \brief The 'qbit' type in Scaffold
PREDEF_TYPE_QBIT_ID = 36,
/// \brief The 'cbit' type in Scaffold
PREDEF_TYPE_CBIT_ID = 37
PREDEF_TYPE_CBIT_ID = 37,
/// \brief The 'qint' type in RKQC
PREDEF_TYPE_QINT_ID = 38,
PREDEF_TYPE_zzBit_ID = 39,
PREDEF_TYPE_zgBit_ID = 40,
PREDEF_TYPE_ooBit_ID = 41,
PREDEF_TYPE_ogBit_ID = 42
};

/// \brief The number of predefined type IDs that are reserved for
Expand Down
18 changes: 18 additions & 0 deletions clang/lib/AST/ASTContext.cpp
Expand Up @@ -498,6 +498,13 @@ void ASTContext::InitBuiltinTypes(const TargetInfo &Target) {
// Scaffold: cbit and qbit types added here for initialization
InitBuiltinType(CbitTy, BuiltinType::Cbit);
InitBuiltinType(QbitTy, BuiltinType::Qbit);

// RKQC: qint added for initialization
InitBuiltinType(QintTy, BuiltinType::Qint);
InitBuiltinType(zzBitTy, BuiltinType::zzBit);
InitBuiltinType(zgBitTy, BuiltinType::zgBit);
InitBuiltinType(ooBitTy, BuiltinType::ooBit);
InitBuiltinType(ogBitTy, BuiltinType::ogBit);

}

Expand Down Expand Up @@ -983,6 +990,10 @@ ASTContext::getTypeInfoImpl(const Type *T) const {
Width = Target->getQbitWidth();
Align = Target->getQbitAlign();
break;
case BuiltinType::Qint:
Width = Target->getQintWidth();
Align = Target->getQintAlign();
break;
}
break;
case Type::ObjCObjectPointer:
Expand Down Expand Up @@ -3629,6 +3640,7 @@ unsigned ASTContext::getIntegerRank(const Type *T) const {
// Scaffold will use that rank for cbit and qbit as a result
case BuiltinType::Cbit:
case BuiltinType::Qbit:
case BuiltinType::Qint:
case BuiltinType::Bool:
return 1 + (getIntWidth(BoolTy) << 3);
case BuiltinType::Char_S:
Expand Down Expand Up @@ -4378,6 +4390,7 @@ static char ObjCEncodingForPrimitiveKind(const ASTContext *C, QualType T) {
// -- FIXME collision between cbit and qbit values, may cause other problems
case BuiltinType::Cbit: return 'l';
case BuiltinType::Qbit: return 'q';
case BuiltinType::Qint: return 'y';
}
}

Expand Down Expand Up @@ -6351,6 +6364,11 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context,
"Bad modifiers used with 'q'!");
Type = Context.QbitTy;
break;
case 'y':
assert(HowLong == 0 && !Signed && !Unsigned &&
"Bad modifiers used with 'y'!");
Type = Context.QintTy;
break;
case 'v':
assert(HowLong == 0 && !Signed && !Unsigned &&
"Bad modifiers used with 'v'!");
Expand Down
2 changes: 2 additions & 0 deletions clang/lib/AST/ItaniumMangle.cpp
Expand Up @@ -1882,6 +1882,8 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
case BuiltinType::NullPtr: Out << "Dn"; break;
case BuiltinType::Cbit: Out << "Cb"; break; // Scaffold
case BuiltinType::Qbit: Out << 'q'; break; // Scaffold
case BuiltinType::Qint: Out << 'y'; break; // Scaffold


#define BUILTIN_TYPE(Id, SingletonId)
#define PLACEHOLDER_TYPE(Id, SingletonId) \
Expand Down
1 change: 1 addition & 0 deletions clang/lib/AST/MicrosoftMangle.cpp
Expand Up @@ -717,6 +717,7 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T) {
// Scaffold cbit & qbit added here since there is no "default" in here
case BuiltinType::Cbit:
case BuiltinType::Qbit:
case BuiltinType::Qint:

case BuiltinType::Char16:
case BuiltinType::Char32:
Expand Down
5 changes: 5 additions & 0 deletions clang/lib/AST/NSAPI.cpp
Expand Up @@ -309,6 +309,11 @@ NSAPI::getNSNumberFactoryMethodKind(QualType T) {
// Scaffold: Cbit and Qbit added here since it gives warning, since there is no "default" in the switch
case BuiltinType::Cbit:
case BuiltinType::Qbit:
case BuiltinType::Qint:
case BuiltinType::zzBit:
case BuiltinType::zgBit:
case BuiltinType::ooBit:
case BuiltinType::ogBit:
break;
}

Expand Down
5 changes: 5 additions & 0 deletions clang/lib/AST/Type.cpp
Expand Up @@ -1525,6 +1525,11 @@ const char *BuiltinType::getName(const PrintingPolicy &Policy) const {
case ObjCSel: return "SEL";
case Cbit: return "cbit"; // Scaffold
case Qbit: return "qbit"; // Scaffold
case Qint: return "qint"; // RKQC
case zzBit: return "qint"; // RKQC
case zgBit: return "qint"; // RKQC
case ooBit: return "qint"; // RKQC
case ogBit: return "qint"; // RKQC
}

llvm_unreachable("Invalid builtin type.");
Expand Down
12 changes: 11 additions & 1 deletion clang/lib/AST/TypeLoc.cpp
Expand Up @@ -215,7 +215,17 @@ TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec() const {
case BuiltinType::Cbit:
return TST_cbit;
case BuiltinType::Qbit:
return TST_qbit;
return TST_qbit;
case BuiltinType::Qint:
return TST_qint;
case BuiltinType::zzBit:
return TST_zero_to_zero;
case BuiltinType::zgBit:
return TST_zero_to_garbage;
case BuiltinType::ooBit:
return TST_one_to_one;
case BuiltinType::ogBit:
return TST_one_to_garbage;
case BuiltinType::UChar:
case BuiltinType::UShort:
case BuiltinType::UInt:
Expand Down
5 changes: 5 additions & 0 deletions clang/lib/Analysis/PrintfFormatString.cpp
Expand Up @@ -377,6 +377,11 @@ bool PrintfSpecifier::fixType(QualType QT, const LangOptions &LangOpt,
// Scaffold's types
case BuiltinType::Cbit:
case BuiltinType::Qbit:
case BuiltinType::Qint:
case BuiltinType::zzBit:
case BuiltinType::zgBit:
case BuiltinType::ooBit:
case BuiltinType::ogBit:
// Various types which are non-trivial to correct.
return false;

Expand Down
66 changes: 66 additions & 0 deletions clang/lib/CodeGen/CGBuiltin.cpp
Expand Up @@ -1275,6 +1275,72 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
llvm::StringRef Str = cast<StringLiteral>(AnnotationStrExpr)->getString();
return RValue::get(EmitAnnotationCall(F, AnnVal, Str, E->getExprLoc()));
}
// RKQC
case Builtin::BIcnot: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *F = CGM.getIntrinsic(Intrinsic::cnot);
return RValue::get(Builder.CreateCall2(F, ControlQbit, TargetQbit));
}
case Builtin::BItoffoli: {
Value *ControlQbit1 = EmitScalarExpr(E->getArg(0));
Value *ControlQbit2 = EmitScalarExpr(E->getArg(1));
Value *TargetQbit = EmitScalarExpr(E->getArg(2));
Value *F = CGM.getIntrinsic(Intrinsic::toffoli);
return RValue::get(Builder.CreateCall3(F, ControlQbit1, ControlQbit2, TargetQbit));
}
case Builtin::BINOT: {
Value *TargetQbit = EmitScalarExpr(E->getArg(0));
Value *F = CGM.getIntrinsic(Intrinsic::NOT);
return RValue::get(Builder.CreateCall(F, TargetQbit));
}
case Builtin::BIassign_value_of_b_to_a: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *Size = EmitScalarExpr(E->getArg(2));
Value *F = CGM.getIntrinsic(Intrinsic::assign_value_of_b_to_a);
return RValue::get(Builder.CreateCall3(F, ControlQbit, TargetQbit, Size));
}
case Builtin::BIassign_value_of_int_to_a: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *Size = EmitScalarExpr(E->getArg(2));
Value *F = CGM.getIntrinsic(Intrinsic::assign_value_of_int_to_a);
return RValue::get(Builder.CreateCall3(F, ControlQbit, TargetQbit, Size));
}
case Builtin::BIa_eq_a_plus_b: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *Size = EmitScalarExpr(E->getArg(2));
Value *F = CGM.getIntrinsic(Intrinsic::a_eq_a_plus_b);
return RValue::get(Builder.CreateCall3(F, ControlQbit, TargetQbit, Size));
}
case Builtin::BIa_eq_a_minus_b: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *Size = EmitScalarExpr(E->getArg(2));
Value *F = CGM.getIntrinsic(Intrinsic::a_eq_a_minus_b);
return RValue::get(Builder.CreateCall3(F, ControlQbit, TargetQbit, Size));
}
case Builtin::BIa_eq_a_plus_b_times_c: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *TargetQbit2 = EmitScalarExpr(E->getArg(2));
Value *Size = EmitScalarExpr(E->getArg(3));
Value *F = CGM.getIntrinsic(Intrinsic::a_eq_a_plus_b_times_c);
return RValue::get(Builder.CreateCall4(F, ControlQbit, TargetQbit, TargetQbit2, Size));
}
case Builtin::BIa_swap_b: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Value *TargetQbit = EmitScalarExpr(E->getArg(1));
Value *Size = EmitScalarExpr(E->getArg(2));
Value *F = CGM.getIntrinsic(Intrinsic::a_swap_b);
return RValue::get(Builder.CreateCall3(F, ControlQbit, TargetQbit, Size));
}




// Scaffold
case Builtin::BICNOT: {
Value *ControlQbit = EmitScalarExpr(E->getArg(0));
Expand Down
5 changes: 5 additions & 0 deletions clang/lib/CodeGen/CGDebugInfo.cpp
Expand Up @@ -389,6 +389,11 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) {
// Scaffold Cbit and Qbit added to avoid warning
case BuiltinType::Cbit:
case BuiltinType::Qbit:
case BuiltinType::Qint:
case BuiltinType::zzBit:
case BuiltinType::zgBit:
case BuiltinType::ooBit:
case BuiltinType::ogBit:

case BuiltinType::UChar:
case BuiltinType::Char_U: Encoding = llvm::dwarf::DW_ATE_unsigned_char; break;
Expand Down
5 changes: 5 additions & 0 deletions clang/lib/CodeGen/CGRTTI.cpp
Expand Up @@ -196,6 +196,11 @@ static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
// Scaffold Cbit and Qbit added to avoid warning
case BuiltinType::Cbit:
case BuiltinType::Qbit:
case BuiltinType::Qint:
case BuiltinType::zzBit:
case BuiltinType::zgBit:
case BuiltinType::ooBit:
case BuiltinType::ogBit:
return true;

case BuiltinType::Dependent:
Expand Down
24 changes: 24 additions & 0 deletions clang/lib/CodeGen/CodeGenTypes.cpp
Expand Up @@ -351,6 +351,30 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
static_cast<unsigned>(Context.getTypeSize(T)));
break;

case BuiltinType::Qint:
ResultType = llvm::IntegerType::get(getLLVMContext(),
static_cast<unsigned>(Context.getTypeSize(T)));
break;
case BuiltinType::zzBit:
ResultType = llvm::IntegerType::get(getLLVMContext(),
static_cast<unsigned>(Context.getTypeSize(T)));
break;
case BuiltinType::zgBit:
ResultType = llvm::IntegerType::get(getLLVMContext(),
static_cast<unsigned>(Context.getTypeSize(T)));
break;
case BuiltinType::ooBit:
ResultType = llvm::IntegerType::get(getLLVMContext(),
static_cast<unsigned>(Context.getTypeSize(T)));
break;
case BuiltinType::ogBit:
ResultType = llvm::IntegerType::get(getLLVMContext(),
static_cast<unsigned>(Context.getTypeSize(T)));
break;




case BuiltinType::Half:
// Half is special: it might be lowered to i16 (and will be storage-only
// type),. or can be represented as a set of native operations.
Expand Down

0 comments on commit fb82d6a

Please sign in to comment.