@@ -511,53 +511,6 @@ llvm::Value *CodeGenLLVM::Visit(const ir::Cast *op) {
511511llvm::Value *CodeGenLLVM::CreateSerialFor (const ir::For *op, int stride) {
512512 SymbolTableGuard symbol_table_guard (*symbol_table_);
513513
514- do {
515- break ;
516- llvm::BasicBlock *preheader_bb = b_->GetInsertBlock ();
517- auto *for_begin = llvm::BasicBlock::Create (
518- b_->getContext (), " for_begin" , b_->GetInsertBlock ()->getParent ());
519- auto *for_body = llvm::BasicBlock::Create (
520- b_->getContext (), " for_body" , b_->GetInsertBlock ()->getParent ());
521- auto *for_end = llvm::BasicBlock::Create (
522- b_->getContext (), " for_end" , b_->GetInsertBlock ()->getParent ());
523-
524- Br (for_begin);
525- b_->SetInsertPoint (for_begin);
526-
527- auto *begin = Visit (&op->min );
528- auto *loop_value = PHI (begin->getType (), 2 );
529- loop_value->addIncoming (begin, preheader_bb);
530-
531- llvm::Value *old_var = GetVar (op->loop_var ->name );
532- SetVar (op->loop_var ->name , loop_value);
533- auto *end = Visit (&op->extent );
534- CondBr (ICmpSLT (loop_value, end), for_body, for_end);
535- b_->SetInsertPoint (for_body);
536- Visit (&op->body );
537-
538- if (old_var) {
539- SetVar (op->loop_var ->name , old_var);
540- } else {
541- symbol_table_->Erase (op->loop_var ->name );
542- }
543-
544- auto loop_next = Add (loop_value,
545- llvm::ConstantInt::get (b_->getInt32Ty (), stride),
546- " indvar.inc" ,
547- true ,
548- true );
549- loop_value->addIncoming (loop_next, b_->GetInsertBlock ());
550-
551- Br (for_begin);
552- b_->SetInsertPoint (for_end);
553-
554- return nullptr ;
555- // llvm::AllocaInst *loop_var = Alloca(b_->getInt32Ty(), nullptr,
556- // op->loop_var->name); loop_var->setAlignment(llvm::Align(4));
557- // SetVar(op->loop_var->name, loop_var);
558- } while (false );
559-
560- // //////////////////////////////////
561514 llvm::BasicBlock *preheader_bb = b_->GetInsertBlock ();
562515 llvm::BasicBlock *exit_bb = nullptr ;
563516
@@ -814,20 +767,13 @@ llvm::Value *CodeGenLLVM::Visit(const ir::_Module_ *op) {
814767}
815768
816769llvm::Value *CodeGenLLVM::Visit (const ir::_Var_ *op) {
817- llvm::Value *value = GetVar (op->name , false );
818- llvm::Value *result{};
819- CHECK (value) << " ir::_Var_[" << op->name << " ]: value is null" ;
820- // TODO(fc500110) hard coding
821- if (LLVM_WillVarLowerAsPointer (op->name )) {
822- result = value;
823- } else if (value->getType ()->isPointerTy () &&
824- !value->getType ()->getPointerElementType ()->isPointerTy ()) {
825- result = Load (value, op->name + " _load" );
826- } else {
827- result = value;
770+ llvm::Value *value = GetVar (op->name , /* lazy= */ false );
771+ // When visiting a Var that is allocated on the stack, we are actually
772+ // reading its value instead of its address.
773+ if (llvm::AllocaInst::classof (value)) {
774+ return Load (value, op->name + " _load" );
828775 }
829-
830- return result;
776+ return value;
831777}
832778
833779void CodeGenLLVM::Scalarize (
@@ -1043,12 +989,6 @@ llvm::Value *CodeGenLLVM::Visit(const ir::_Buffer_ *op) {
1043989
1044990llvm::Value *CodeGenLLVM::Visit (const ir::_Tensor_ *op) {
1045991 return GetVar (op->name );
1046- auto *buffer_op = op->buffer .As <ir::_Buffer_>();
1047- if (symbol_table_->Lookup (buffer_op->name )) {
1048- return Visit (buffer_op);
1049- }
1050-
1051- return SetVar (buffer_op->name , Visit (buffer_op));
1052992}
1053993
1054994template <typename T,
@@ -1437,10 +1377,6 @@ void CodeGenLLVM::InitTarget(const Target &target) {
14371377 naive_vec_alignment_ = GetNaiveVecAlignment (target);
14381378}
14391379
1440- bool LLVM_WillVarLowerAsPointer (const std::string &var_name) {
1441- return var_name == " _args" || utils::EndsWith (var_name, " __ptr" );
1442- }
1443-
14441380void CodeGenLLVM::AddTbaaMetadata (llvm::Instruction *inst,
14451381 absl::string_view buffer,
14461382 Expr index) {
0 commit comments