1 //===- subzero/src/IceThreading.cpp - Threading function definitions ------===//
2 //
3 // The Subzero Code Generator
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// \brief Defines threading-related functions.
12 ///
13 //===----------------------------------------------------------------------===//
14
15 #include "IceThreading.h"
16
17 #include "IceCfg.h"
18 #include "IceDefs.h"
19
20 namespace Ice {
21
EmitterWorkItem(uint32_t Seq)22 EmitterWorkItem::EmitterWorkItem(uint32_t Seq)
23 : Sequence(Seq), Kind(WI_Nop), GlobalInits(nullptr), Function(nullptr),
24 RawFunc(nullptr) {}
EmitterWorkItem(uint32_t Seq,std::unique_ptr<VariableDeclarationList> D)25 EmitterWorkItem::EmitterWorkItem(uint32_t Seq,
26 std::unique_ptr<VariableDeclarationList> D)
27 : Sequence(Seq), Kind(WI_GlobalInits), GlobalInits(std::move(D)),
28 Function(nullptr), RawFunc(nullptr) {}
EmitterWorkItem(uint32_t Seq,std::unique_ptr<Assembler> A)29 EmitterWorkItem::EmitterWorkItem(uint32_t Seq, std::unique_ptr<Assembler> A)
30 : Sequence(Seq), Kind(WI_Asm), GlobalInits(nullptr), Function(std::move(A)),
31 RawFunc(nullptr) {}
EmitterWorkItem(uint32_t Seq,std::unique_ptr<Cfg> F)32 EmitterWorkItem::EmitterWorkItem(uint32_t Seq, std::unique_ptr<Cfg> F)
33 : Sequence(Seq), Kind(WI_Cfg), GlobalInits(nullptr), Function(nullptr),
34 RawFunc(std::move(F)) {}
35
setGlobalInits(std::unique_ptr<VariableDeclarationList> GloblInits)36 void EmitterWorkItem::setGlobalInits(
37 std::unique_ptr<VariableDeclarationList> GloblInits) {
38 assert(getKind() == WI_Asm || getKind() == WI_Cfg);
39 GlobalInits = std::move(GloblInits);
40 }
41
getGlobalInits()42 std::unique_ptr<VariableDeclarationList> EmitterWorkItem::getGlobalInits() {
43 assert(getKind() == WI_GlobalInits || getKind() == WI_Asm ||
44 getKind() == WI_Cfg);
45 return std::move(GlobalInits);
46 }
47
getAsm()48 std::unique_ptr<Assembler> EmitterWorkItem::getAsm() {
49 assert(getKind() == WI_Asm);
50 return std::move(Function);
51 }
52
getCfg()53 std::unique_ptr<Cfg> EmitterWorkItem::getCfg() {
54 assert(getKind() == WI_Cfg);
55 return std::move(RawFunc);
56 }
57
58 } // end of namespace Ice
59