This patch LGTM, pushed, thanks.
On Wed, Jun 18, 2014 at 02:42:07PM +0800, [email protected] wrote: > From: Junyan He <[email protected]> > > Fix some typo and use macro to simplify the code. > > Signed-off-by: Junyan He <[email protected]> > --- > backend/src/llvm/llvm_printf_parser.cpp | 163 > +++++++++++++------------------- > 1 file changed, 65 insertions(+), 98 deletions(-) > > diff --git a/backend/src/llvm/llvm_printf_parser.cpp > b/backend/src/llvm/llvm_printf_parser.cpp > index ec8e76d..fa06995 100644 > --- a/backend/src/llvm/llvm_printf_parser.cpp > +++ b/backend/src/llvm/llvm_printf_parser.cpp > @@ -16,7 +16,7 @@ > */ > > /** > - * \file llvm_printf.cpp > + * \file llvm_printf_parser.cpp > * > * When there are printf functions existing, we have something to do here. > * Because the GPU's feature, it is relatively hard to parse and caculate the > @@ -152,19 +152,10 @@ namespace gbe > FMT_PLUS_PLUS; > switch (*fmt) { > case '2': > - state->vector_n = 2; > - FMT_PLUS_PLUS; > - break; > case '3': > - state->vector_n = 3; > - FMT_PLUS_PLUS; > - break; > case '4': > - state->vector_n = 4; > - FMT_PLUS_PLUS; > - break; > case '8': > - state->vector_n = 8; > + state->vector_n = *fmt - '0'; > FMT_PLUS_PLUS; > break; > case '1': > @@ -226,7 +217,7 @@ namespace gbe > CONVERSION_SPEC_AND_RET('s', A) > CONVERSION_SPEC_AND_RET('p', P) > > - // %% has been handled > + // %% has been handled > > default: > return -1; > @@ -278,6 +269,7 @@ again: > goto error; > > printf_fmt->push_back(&state); > + num++; > > if (rend == end) > break; > @@ -285,10 +277,11 @@ again: > begin = rend; > } > > +#if 0 > + int j = 0; > for (auto &s : *printf_fmt) { > + j++; > if (s.type == PRINTF_SLOT_TYPE_STATE) { > - num++; > -#if 0 > printf("---- %d ---: state : \n", j); > printf(" left_justified : %d\n", > s.state->left_justified); > printf(" sign_symbol: %d\n", s.state->sign_symbol); > @@ -299,11 +292,11 @@ again: > printf(" precision : %d\n", s.state->precision); > printf(" length_modifier : %d\n", > s.state->length_modifier); > printf(" conversion_specifier : %d\n", > s.state->conversion_specifier); > -#endif > } else if (s.type == PRINTF_SLOT_TYPE_STRING) { > - //printf("---- %d ---: string : %s\n", j, s.str); > + printf("---- %d ---: string : %s\n", j, s.str); > } > } > +#endif > > return printf_fmt; > > @@ -328,7 +321,8 @@ error: > static map<CallInst*, PrintfSet::PrintfFmt*> printfs; > int printf_num; > > - PrintfParser(void) : FunctionPass(ID) { > + PrintfParser(void) : FunctionPass(ID) > + { > module = NULL; > builder = NULL; > intTy = NULL; > @@ -339,7 +333,8 @@ error: > printf_num = 0; > } > > - ~PrintfParser(void) { > + ~PrintfParser(void) > + { > for (auto &s : printfs) { > delete s.second; > s.second = NULL; > @@ -351,7 +346,8 @@ error: > bool parseOnePrintfInstruction(CallInst *& call); > int generateOneParameterInst(PrintfSlot& slot, Value& arg); > > - virtual const char *getPassName() const { > + virtual const char *getPassName() const > + { > return "Printf Parser"; > } > > @@ -393,81 +389,52 @@ error: > /* FIXME: Because the OpenCL language do not support va macro, and we do > not want > to introduce the va_list, va_start and va_end into our code, we just > simulate > the function calls to caculate the offset caculation here. */ > - CallInst* group_id_2 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_group_id2", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* group_id_1 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_group_id1", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* group_id_0 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_group_id0", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - > - CallInst* global_size_2 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_global_size2", > - > IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* global_size_1 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_global_size1", > - > IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* global_size_0 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_global_size0", > - > IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - > - CallInst* local_id_2 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_local_id2", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* local_id_1 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_local_id1", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* local_id_0 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_local_id0", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - > - CallInst* local_size_2 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_local_size2", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* local_size_1 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_local_size1", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > - CallInst* local_size_0 = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( > - "__gen_ocl_get_local_size0", > - IntegerType::getInt32Ty(module->getContext()), > - NULL))); > +#define BUILD_CALL_INST(name) \ > + CallInst* name = > builder->CreateCall(cast<llvm::Function>(module->getOrInsertFunction( \ > + "__gen_ocl_get_"#name, > \ > + IntegerType::getInt32Ty(module->getContext()), > \ > + NULL))) > + > + BUILD_CALL_INST(group_id2); > + BUILD_CALL_INST(group_id1); > + BUILD_CALL_INST(group_id0); > + BUILD_CALL_INST(global_size2); > + BUILD_CALL_INST(global_size1); > + BUILD_CALL_INST(global_size0); > + BUILD_CALL_INST(local_id2); > + BUILD_CALL_INST(local_id1); > + BUILD_CALL_INST(local_id0); > + BUILD_CALL_INST(local_size2); > + BUILD_CALL_INST(local_size1); > + BUILD_CALL_INST(local_size0); > + > +#undef BUILD_CALL_INST > + > Value* op0 = NULL; > Value* val = NULL; > - /* offset = ((local_id_2 + local_size_2 * group_id_2) * (global_size_1 * > global_size_0) > - + (local_id_1 + local_size_1 * group_id_1) * global_size_0 > - + (local_id_0 + local_size_0 * group_id_0)) * sizeof(type) */ > - > - // local_size_2 * group_id_2 > - val = builder->CreateMul(local_size_2, group_id_2); > - // local_id_2 + local_size_2 * group_id_2 > - val = builder->CreateAdd(local_id_2, val); > - // global_size_1 * global_size_0 > - op0 = builder->CreateMul(global_size_1, global_size_0); > - // (local_id_2 + local_size_2 * group_id_2) * (global_size_1 * > global_size_0) > + /* calculate offset for later usage. > + offset = ((local_id2 + local_size2 * group_id2) * (global_size1 * > global_size0) > + + (local_id1 + local_size1 * group_id1) * global_size0 > + + (local_id0 + local_size0 * group_id0)) * sizeof(type) */ > + > + // local_size2 * group_id2 > + val = builder->CreateMul(local_size2, group_id2); > + // local_id2 + local_size2 * group_id2 > + val = builder->CreateAdd(local_id2, val); > + // global_size1 * global_size0 > + op0 = builder->CreateMul(global_size1, global_size0); > + // (local_id2 + local_size2 * group_id2) * (global_size1 * global_size0) > Value* offset1 = builder->CreateMul(val, op0); > - // local_size_1 * group_id_1 > - val = builder->CreateMul(local_size_1, group_id_1); > - // local_id_1 + local_size_1 * group_id_1 > - val = builder->CreateAdd(local_id_1, val); > - // (local_id_1 + local_size_1 * group_id_1) * global_size_0 > - Value* offset2 = builder->CreateMul(val, global_size_0); > - // local_size_0 * group_id_0 > - val = builder->CreateMul(local_size_0, group_id_0); > - // local_id_0 + local_size_0 * group_id_0 > - val = builder->CreateAdd(local_id_0, val); > + // local_size1 * group_id1 > + val = builder->CreateMul(local_size1, group_id1); > + // local_id1 + local_size1 * group_id1 > + val = builder->CreateAdd(local_id1, val); > + // (local_id1 + local_size1 * group_id1) * global_size_0 > + Value* offset2 = builder->CreateMul(val, global_size0); > + // local_size0 * group_id0 > + val = builder->CreateMul(local_size0, group_id0); > + // local_id0 + local_size0 * group_id0 > + val = builder->CreateAdd(local_id0, val); > // The total sum > val = builder->CreateAdd(val, offset1); > Value* offset = builder->CreateAdd(val, offset2); > @@ -475,12 +442,12 @@ error: > ///////////////////////////////////////////////////// > /* calculate index address. > index_addr = (index_offset + offset )* sizeof(int) + index_buf_ptr > - index_offset = global_size_2 * global_size_1 * global_size_0 * > printf_num */ > + index_offset = global_size2 * global_size1 * global_size0 * > printf_num */ > > - // global_size_2 * global_size_1 > - op0 = builder->CreateMul(global_size_2, global_size_1); > - // global_size_2 * global_size_1 * global_size_0 > - Value* glXg2Xg3 = builder->CreateMul(op0, global_size_0); > + // global_size2 * global_size1 > + op0 = builder->CreateMul(global_size2, global_size1); > + // global_size2 * global_size1 * global_size0 > + Value* glXg2Xg3 = builder->CreateMul(op0, global_size0); > Value* index_offset = builder->CreateMul(glXg2Xg3, > ConstantInt::get(intTy, printf_num)); > // index_offset + offset > op0 = builder->CreateAdd(index_offset, offset); > @@ -509,9 +476,9 @@ error: > ///////////////////////////////////////////////////// > /* Calculate the data address. > data_addr = data_offset + pbuf_ptr + offset * sizeof(specify) > - data_offset = global_size_2 * global_size_1 * global_size_0 * > out_buf_sizeof_offset > + data_offset = global_size2 * global_size1 * global_size0 * > out_buf_sizeof_offset > > - //global_size_2 * global_size_1 * global_size_0 * > out_buf_sizeof_offset */ > + //global_size2 * global_size1 * global_size0 * out_buf_sizeof_offset */ > op0 = builder->CreateMul(glXg2Xg3, ConstantInt::get(intTy, > out_buf_sizeof_offset)); > //offset * sizeof(specify) > val = builder->CreateMul(offset, ConstantInt::get(intTy, sizeof_size)); > -- > 1.8.3.2 > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
