changeset 980:ae710cba0884

Clean up the code generated when jumping out of inline asm and make label names more expressive.
author Frits van Bommel <fvbommel wxs.nl>
date Wed, 18 Feb 2009 22:50:22 +0100
parents 523bf4f166bc
children 855889b7b268
files gen/asmstmt.cpp gen/llvmhelpers.cpp gen/statements.cpp
diffstat 3 files changed, 8 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/gen/asmstmt.cpp	Wed Feb 18 21:46:14 2009 +0100
+++ b/gen/asmstmt.cpp	Wed Feb 18 22:50:22 2009 +0100
@@ -540,7 +540,7 @@
 
         // initialize the setter statement we're going to build
         IRAsmStmt* outSetterStmt = new IRAsmStmt;
-        std::string asmGotoEnd = "jmp "+asmGotoEndLabel.str()+" ; ";
+        std::string asmGotoEnd = "\n\tjmp "+asmGotoEndLabel.str()+"\n";
         std::ostringstream code;
         code << asmGotoEnd;
 
@@ -574,8 +574,8 @@
 
             // provide an in-asm target for the branch and set value
             Logger::println("statement '%s' references outer label '%s': creating forwarder", a->code.c_str(), a->isBranchToLabel->string);
-            code << fdmangle << '_' << a->isBranchToLabel->string << ": ; ";
-            code << "movl $<<in" << n_goto << ">>, $<<out0>> ; ";
+            code << fdmangle << '_' << a->isBranchToLabel->string << ":\n\t";
+            code << "movl $<<in" << n_goto << ">>, $<<out0>>\n";
             //FIXME: Store the value -> label mapping somewhere, so it can be referenced later
             outSetterStmt->in.push_back(DtoConstUint(n_goto));
             outSetterStmt->in_c += "i,";
@@ -587,7 +587,7 @@
         {
             // finalize code
             outSetterStmt->code = code.str();
-            outSetterStmt->code += asmGotoEndLabel.str()+": ; ";
+            outSetterStmt->code += asmGotoEndLabel.str()+":\n";
 
             // create storage for and initialize the temporary
             jump_target = DtoAlloca(LLType::Int32Ty, "__llvm_jump_target");
--- a/gen/llvmhelpers.cpp	Wed Feb 18 21:46:14 2009 +0100
+++ b/gen/llvmhelpers.cpp	Wed Feb 18 22:50:22 2009 +0100
@@ -191,7 +191,7 @@
     std::string labelname = gIR->func()->getScopedLabelName(target->toChars());
     llvm::BasicBlock*& targetBB = gIR->func()->labelToBB[labelname];
     if (targetBB == NULL)
-        targetBB = llvm::BasicBlock::Create("label", gIR->topfunc());
+        targetBB = llvm::BasicBlock::Create("label_" + labelname, gIR->topfunc());
 
     // find finallys between goto and label
     EnclosingHandler* endfinally = enclosinghandler;
--- a/gen/statements.cpp	Wed Feb 18 21:46:14 2009 +0100
+++ b/gen/statements.cpp	Wed Feb 18 22:50:22 2009 +0100
@@ -1224,13 +1224,13 @@
 
         llvm::BasicBlock* oldend = gIR->scopeend();
         if (labelBB != NULL) {
-                labelBB->moveBefore(oldend);
+            labelBB->moveBefore(oldend);
         } else {
-                labelBB = llvm::BasicBlock::Create("label", p->topfunc(), oldend);
+            labelBB = llvm::BasicBlock::Create("label_" + labelname, p->topfunc(), oldend);
         }
 
         if (!p->scopereturned())
-                llvm::BranchInst::Create(labelBB, p->scopebb());
+            llvm::BranchInst::Create(labelBB, p->scopebb());
 
         p->scope() = IRScope(labelBB,oldend);
     }