Skip to content

Commit 1608b0d

Browse files
Sherstennikov, MikhailZuul
authored andcommitted
Added support to dump isa into ostream
Change-Id: I615bf54c679798b98eb44f2e41a2b8d2ebeffa5c
1 parent 9b5bf28 commit 1608b0d

File tree

7 files changed

+50
-35
lines changed

7 files changed

+50
-35
lines changed

visa/BuildCISAIR.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class CISA_IR_Builder : public VISABuilder
101101
static int DestroyBuilder(CISA_IR_Builder *builder);
102102
CM_BUILDER_API virtual int AddKernel(VISAKernel *& kernel, const char* kernelName);
103103
CM_BUILDER_API virtual int AddFunction(VISAFunction *& function, const char* functionName);
104-
CM_BUILDER_API virtual int Compile(const char * isaFileNameint);
104+
CM_BUILDER_API virtual int Compile(const char * isaFileNameint, std::ostream * os = nullptr, bool emit_visa_only = false);
105105

106106
CM_BUILDER_API void SetOption(vISAOptions option, bool val) { m_options.setOption(option, val); }
107107
CM_BUILDER_API void SetOption(vISAOptions option, uint32_t val) { m_options.setOption(option, val); }

visa/BuildCISAIRImpl.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ int CISA_IR_Builder::ParseVISAText(const std::string& visaFile)
741741

742742
// default size of the kernel mem manager in bytes
743743
#define KERNEL_MEM_SIZE (4*1024*1024)
744-
int CISA_IR_Builder::Compile( const char* nameInput)
744+
int CISA_IR_Builder::Compile(const char* nameInput, std::ostream* os, bool emit_visa_only)
745745
{
746746

747747
stopTimer(TIMER_BUILDER); // TIMER_BUILDER is started when builder is created
@@ -795,11 +795,16 @@ int CISA_IR_Builder::Compile( const char* nameInput)
795795
/*
796796
In case there is an assert in compilation phase, at least vISA binary will be generated.
797797
*/
798-
if ( IS_VISA_BOTH_PATH && m_options.getOption(vISA_DumpvISA) )
798+
if (IS_VISA_BOTH_PATH && m_options.getOption(vISA_DumpvISA) && nameInput && !os)
799799
{
800800
status = m_cisaBinary->dumpToFile(name);
801801
}
802802

803+
if (os && emit_visa_only)
804+
{
805+
return m_cisaBinary->dumpToStream(os);
806+
}
807+
803808
if ( IS_GEN_BOTH_PATH )
804809
{
805810
Mem_Manager mem(4096);
@@ -961,7 +966,10 @@ int CISA_IR_Builder::Compile( const char* nameInput)
961966
}
962967
}
963968

964-
status = m_cisaBinary->dumpToFile(name);
969+
if (os)
970+
status = m_cisaBinary->dumpToStream(os);
971+
else
972+
status = m_cisaBinary->dumpToFile(name);
965973
}
966974

967975
stopTimer(TIMER_TOTAL); // have to record total time before dump the timer

visa/Common_ISA_framework.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,24 @@ int CisaBinary::finalizeCisaBinary()
325325
return CM_SUCCESS;
326326
}
327327

328+
int CisaBinary::dumpToStream(std::ostream * os)
329+
{
330+
os->write(this->m_header_buffer, this->m_header_size);
331+
332+
for (int i = 0; i < m_header.num_kernels; i++)
333+
{
334+
os->write(m_header.kernels[i].cisa_binary_buffer, m_header.kernels[i].size);
335+
os->write(m_header.kernels[i].genx_binary_buffer, m_header.kernels[i].binary_size);
336+
}
337+
338+
for (int i = 0; i < m_header.num_functions; i++)
339+
{
340+
os->write(m_header.functions[i].cisa_binary_buffer, m_header.functions[i].size);
341+
os->write(m_header.functions[i].genx_binary_buffer, m_header.functions[i].binary_size);
342+
}
343+
return CM_SUCCESS;
344+
}
345+
328346
int CisaBinary::dumpToFile(std::string binFileName)
329347
{
330348
if ( binFileName == "" )
@@ -338,21 +356,9 @@ int CisaBinary::dumpToFile(std::string binFileName)
338356
std::cerr<<"Could not open %s"<< binFileName.c_str()<<std::endl;
339357
return CM_FAILURE;
340358
}
341-
os.write(this->m_header_buffer, this->m_header_size);
342-
343-
for(int i = 0; i< m_header.num_kernels; i++)
344-
{
345-
os.write(m_header.kernels[i].cisa_binary_buffer, m_header.kernels[i].size);
346-
os.write(m_header.kernels[i].genx_binary_buffer, m_header.kernels[i].binary_size);
347-
}
348-
349-
for (int i = 0; i < m_header.num_functions; i++)
350-
{
351-
os.write(m_header.functions[i].cisa_binary_buffer, m_header.functions[i].size);
352-
os.write(m_header.functions[i].genx_binary_buffer, m_header.functions[i].binary_size);
353-
}
359+
int result = dumpToStream(&os);
354360
os.close();
355-
return CM_SUCCESS;
361+
return result;
356362
}
357363

358364
void CisaBinary::writeIsaAsmFile(string filename, string isaasmStr) const

visa/Common_ISA_framework.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ class CisaBinary
256256
void initKernel( int kernelIndex, VISAKernelImpl * kernel );
257257
int finalizeCisaBinary();
258258
int dumpToFile(std::string binFileName);
259+
int dumpToStream(std::ostream *os);
259260

260261
unsigned getInstId() const { return m_instId; }
261262
void incrementInstId() const { m_instId++; }

visa/Gen4_IR.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2499,7 +2499,7 @@ bool G4_INST::canHoist(bool simdBB, const Options *opt) const
24992499
if (src->isImm() ||
25002500
archRegSrc ||
25012501
indirectSrc ||
2502-
(src->asSrcRegRegion()->getModifier() != Mod_src_undef) ||
2502+
(src->isSrcRegRegion() && src->asSrcRegRegion()->getModifier() != Mod_src_undef) ||
25032503
(defInstList.size() == 0) ||
25042504
noMultiDefOpt)
25052505
{

visa/include/VISABuilderAPIDefinition.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ class VISABuilder
814814
public:
815815
CM_BUILDER_API virtual int AddKernel(VISAKernel *& kernel, const char* kernelName) = 0;
816816
CM_BUILDER_API virtual int AddFunction(VISAFunction *& function, const char* functionName) = 0;
817-
CM_BUILDER_API virtual int Compile(const char * isaFileNameint) = 0;
817+
CM_BUILDER_API virtual int Compile(const char * isaFileNameint, std::ostream* os = nullptr, bool emit_visa_only = false) = 0;
818818

819819
CM_BUILDER_API virtual void SetOption(vISAOptions option, bool val) = 0;
820820
CM_BUILDER_API virtual void SetOption(vISAOptions option, uint32_t val) = 0;

visa/include/visaBuilder_interface.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2424
2525
======================= end_copyright_notice ==================================*/
2626

27-
struct VISA_GenVar;
28-
struct VISA_AddrVar;
29-
struct VISA_PredVar;
30-
struct VISA_SamplerVar;
31-
struct VISA_SurfaceVar;
32-
struct VISA_VMEVar;
33-
struct VISA_LabelVar;
34-
struct VISA_FileVar;
35-
36-
37-
struct VISA_PredOpnd;
38-
struct VISA_RawOpnd;
39-
struct VISA_VectorOpnd;
40-
struct VISA_LabelOpnd;
41-
struct VISA_StateOpndHandle;
27+
typedef struct _VISA_GenVar VISA_GenVar;
28+
typedef struct _VISA_AddrVar VISA_AddrVar;
29+
typedef struct _VISA_PredVar VISA_PredVar;
30+
typedef struct _VISA_SamplerVar VISA_SamplerVar;
31+
typedef struct _VISA_SurfaceVar VISA_SurfaceVar;
32+
typedef struct _VISA_VMEVar VISA_VMEVar;
33+
typedef struct _VISA_LabelVar VISA_LabelVar;
34+
typedef struct _VISA_FileVar VISA_FileVar;
35+
36+
37+
typedef struct _VISA_LabelOpnd VISA_LabelOpnd;
38+
typedef struct _VISA_VectorOpnd VISA_VectorOpnd;
39+
typedef struct _VISA_RawOpnd VISA_RawOpnd;
40+
typedef struct _VISA_PredOpnd VISA_PredOpnd;
41+
typedef struct _VISA_StateOpndHandle VISA_StateOpndHandle;
4242

4343
#define CM_BUILDER_API
4444

0 commit comments

Comments
 (0)