From rspencer at reidspencer.com Tue Jul 11 18:23:20 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Tue, 11 Jul 2006 18:23:20 -0700 Subject: [hlvm-commits] r415 - in hlvm: CodeGen Pass Message-ID: <200607120123.k6C1NK02010345@server1.hlvm.org> Author: reid Date: 2006-07-11 18:23:20 -0700 (Tue, 11 Jul 2006) New Revision: 415 Log: Handle constant characters and constant arguments to functions. This permits HLVM to correctly compile the first batch of 66 generated test functions. Modified: hlvm/CodeGen/LLVMEmitter.cpp hlvm/CodeGen/LLVMGenerator.cpp hlvm/Pass/Validate.cpp Modified: hlvm/CodeGen/LLVMEmitter.cpp =================================================================== --- hlvm/CodeGen/LLVMEmitter.cpp 2006-07-12 00:27:59 UTC (rev 414) +++ hlvm/CodeGen/LLVMEmitter.cpp 2006-07-12 01:23:20 UTC (rev 415) @@ -500,7 +500,17 @@ // The result must be a first class type at this point, ensure it hlvmAssert(F->getReturnType()->isFirstClassType()); - return new llvm::CallInst(F, args, F->getName() + "_result", TheBlock); + // Copy the other arguments + ArgList newArgs; + for (ArgList::const_iterator I = args.begin(), E = args.end(); + I != E; ++I) + if (isa(*I) && !isa(*I) && + !(*I)->getType()->isFirstClassType()) + newArgs.push_back(NewGConst((*I)->getType(), + cast(*I), (*I)->getName())); + else + newArgs.push_back(*I); + return new llvm::CallInst(F, newArgs, F->getName() + "_result", TheBlock); } void Modified: hlvm/CodeGen/LLVMGenerator.cpp =================================================================== --- hlvm/CodeGen/LLVMGenerator.cpp 2006-07-12 00:27:59 UTC (rev 414) +++ hlvm/CodeGen/LLVMGenerator.cpp 2006-07-12 01:23:20 UTC (rev 415) @@ -174,7 +174,7 @@ // Okay, we haven't seen this type before so let's construct it switch (ty->getID()) { case BooleanTypeID: result = llvm::Type::BoolTy; break; - case CharacterTypeID: result = llvm::Type::IntTy; break; + case CharacterTypeID: result = llvm::Type::UIntTy; break; case AnyTypeID: hlvmNotImplemented("Any Type"); break; @@ -341,6 +341,23 @@ result = llvm::ConstantBool::get(CI->getValue()); break; } + case ConstantCharacterID: + { + const ConstantCharacter* CE = llvm::cast(C); + const std::string& cVal = CE->getValue(); + hlvmAssert(!cVal.empty() && "Empty constant character?"); + uint32_t val = 0; + if (cVal[0] == '#') { + const char* startptr = &cVal.c_str()[1]; + char* endptr = 0; + val = strtoul(startptr,&endptr,16); + hlvmAssert(startptr != endptr); + } else { + val = cVal[0]; + } + result = em.getUVal(llvm::Type::UIntTy,val); + break; + } case ConstantEnumeratorID: { const ConstantEnumerator* CE = llvm::cast(C); @@ -1559,6 +1576,12 @@ case ConstantBooleanID: getConstant(llvm::cast(n)); break; + case ConstantCharacterID: + getConstant(llvm::cast(n)); + break; + case ConstantEnumeratorID: + getConstant(llvm::cast(n)); + break; case ConstantIntegerID: getConstant(llvm::cast(n)); break; @@ -1706,6 +1729,7 @@ modules.push_back(em.FinishModule()); break; case ConstantBooleanID: + case ConstantCharacterID: case ConstantEnumeratorID: case ConstantIntegerID: case ConstantRealID: Modified: hlvm/Pass/Validate.cpp =================================================================== --- hlvm/Pass/Validate.cpp 2006-07-12 00:27:59 UTC (rev 414) +++ hlvm/Pass/Validate.cpp 2006-07-12 01:23:20 UTC (rev 415) @@ -45,6 +45,7 @@ #include #include #include +#include using namespace hlvm; using namespace llvm; @@ -483,7 +484,25 @@ template<> inline void ValidateImpl::validate(ConstantCharacter* n) { - checkConstant(n,ConstantCharacterID); + if (checkConstant(n,ConstantCharacterID)) { + if (const CharacterType* CT = dyn_cast(n->getType())) { + const std::string& cVal = n->getValue(); + if (cVal.empty()) { + error(n,"Constant character of zero length not permitted"); + } else if (cVal[0] == '#') { + const char* startptr = &cVal.c_str()[1]; + char* endptr; + uint32_t val = strtoul(startptr, &endptr, 16); + if (endptr == startptr || (val == ULONG_MAX && errno != 0)) + error(n,"Invalid numeric constant character '" + cVal + "'"); + else if (val == 0) + error(n,"Zero valued character constant not permitted"); + } else if (cVal.size() > 1) { + error(n,"Too many characters (" + utostr(cVal.size()) + + ") for character constant"); + } + } + } } template<> inline void From rspencer at reidspencer.com Tue Jul 11 18:25:56 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Tue, 11 Jul 2006 18:25:56 -0700 Subject: [hlvm-commits] r416 - tools/hlvm-gentestcase Message-ID: <200607120125.k6C1Putt010366@server1.hlvm.org> Author: reid Date: 2006-07-11 18:25:56 -0700 (Tue, 11 Jul 2006) New Revision: 416 Log: Make sure we have enough bits in the exponent of real types in order to handle the floating point value ranges we generate. Modified: tools/hlvm-gentestcase/Generate.cpp Modified: tools/hlvm-gentestcase/Generate.cpp =================================================================== --- tools/hlvm-gentestcase/Generate.cpp 2006-07-12 01:23:20 UTC (rev 415) +++ tools/hlvm-gentestcase/Generate.cpp 2006-07-12 01:25:56 UTC (rev 416) @@ -186,7 +186,7 @@ Locator* loc = getLocator(); std::string name = "real_" + utostr(line); result = - ast->new_RealType(name,bundle,randRange(1,52),randRange(1,11),loc); + ast->new_RealType(name,bundle,randRange(8,52),randRange(8,11),loc); break; } case PointerTypeID: From rspencer at reidspencer.com Tue Jul 11 18:26:28 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Tue, 11 Jul 2006 18:26:28 -0700 Subject: [hlvm-commits] r417 - tools/hlvm-compiler Message-ID: <200607120126.k6C1QSdn010382@server1.hlvm.org> Author: reid Date: 2006-07-11 18:26:28 -0700 (Tue, 11 Jul 2006) New Revision: 417 Log: Update to handle changes in the code generation interface. Modified: tools/hlvm-compiler/hlvm-compiler.cpp Modified: tools/hlvm-compiler/hlvm-compiler.cpp =================================================================== --- tools/hlvm-compiler/hlvm-compiler.cpp 2006-07-12 01:25:56 UTC (rev 416) +++ tools/hlvm-compiler/hlvm-compiler.cpp 2006-07-12 01:26:28 UTC (rev 417) @@ -28,6 +28,7 @@ //===----------------------------------------------------------------------===// #include +#include #include #include #include @@ -50,9 +51,6 @@ static cl::opt NoValidate("no-validate", cl::init(false), cl::desc("Don't validate input before generating code")); -static cl::opt NoVerify("no-verify", cl::init(false), - cl::desc("Don't verify generated LLVM module")); - enum GenerationOptions { GenLLVMBytecode, GenLLVMAssembly, @@ -125,18 +123,24 @@ if (!validate(node)) exit(3); } + std::string ErrMsg; switch (WhatToGenerate) { case GenLLVMBytecode: - if (!generateBytecode(node,*Out, !NoVerify)) + if (!generateBytecode(node,*Out, ErrMsg)) { + std::cerr << argv[0] << ": Code generation error:\n" << ErrMsg; exit(4); + } break; case GenLLVMAssembly: - if (!generateAssembly(node,*Out, !NoVerify)) + if (!generateAssembly(node,*Out, ErrMsg)) { + std::cerr << argv[0] << ": Code generation error:\n" << ErrMsg; exit(4); + } break; case GenHLVMXML: { XMLWriter* wrtr = XMLWriter::create(OutputFilename.c_str()); + hlvmAssert(wrtr && "Can't create XMLWriter?"); wrtr->write(node); delete wrtr; break; From rspencer at reidspencer.com Tue Jul 11 18:28:16 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Tue, 11 Jul 2006 18:28:16 -0700 Subject: [hlvm-commits] r418 - in test: lib return0 Message-ID: <200607120128.k6C1SGM5010418@server1.hlvm.org> Author: reid Date: 2006-07-11 18:28:16 -0700 (Tue, 11 Jul 2006) New Revision: 418 Log: Enhance the return0 tester to accept a new argument that determines whether a non-zero result is fatal or not. This permits return0 to be used for other purposes. Fix the generate.exp to handle the result of the test correctly. Fix the return0/dg.exp to handle the new argument. Modified: test/lib/generate.exp test/lib/return0.exp test/return0/dg.exp Modified: test/lib/generate.exp =================================================================== --- test/lib/generate.exp 2006-07-12 01:26:28 UTC (rev 417) +++ test/lib/generate.exp 2006-07-12 01:28:16 UTC (rev 418) @@ -65,7 +65,7 @@ set status [lindex $::errorCode 2] pass "$test: $testexe returned $status" } else { - fail "$test: $testexe return $::errorCode\n$msg" + fail "$test: $testexe return $status\n$msg" } } else { fail "$test: $testexe return $retval\n$msg" Modified: test/lib/return0.exp =================================================================== --- test/lib/return0.exp 2006-07-12 01:26:28 UTC (rev 417) +++ test/lib/return0.exp 2006-07-12 01:28:16 UTC (rev 418) @@ -20,7 +20,7 @@ # MA 02110-1301 USA # #===------------------------------------------------------------------------===# -proc hlvm-ret-zero-test { pat } { +proc hlvm-ret-zero-test { pat forceret0 } { global srcdir subdir objdir tmpdir objrootdir llc gccld gxx APR_lib set outdir [file join $objdir $subdir] set compiler [file join $objrootdir tools hlvm-compiler hlvm-compiler ] @@ -71,7 +71,11 @@ } else { set retval [ catch {exec $testexe $testname } msg ] if {$retval != 0} { - fail "$test: $testexe returned $retval:\n$msg" + if { ! $forceret0 } { + pass "$test" + } else { + fail "$test: $testexe returned $retval:\n$msg" + } } else { pass "$test" } Modified: test/return0/dg.exp =================================================================== --- test/return0/dg.exp 2006-07-12 01:26:28 UTC (rev 417) +++ test/return0/dg.exp 2006-07-12 01:28:16 UTC (rev 418) @@ -1,3 +1,3 @@ load_lib return0.exp -hlvm-ret-zero-test "*.hlx" +hlvm-ret-zero-test "*.hlx" 1 From rspencer at reidspencer.com Tue Jul 11 18:28:36 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Tue, 11 Jul 2006 18:28:36 -0700 Subject: [hlvm-commits] r419 - test/invalid Message-ID: <200607120128.k6C1Saxu010434@server1.hlvm.org> Author: reid Date: 2006-07-11 18:28:36 -0700 (Tue, 11 Jul 2006) New Revision: 419 Log: Handle bad enumerator values. Added: test/invalid/badenum.hlx Added: test/invalid/badenum.hlx =================================================================== --- test/invalid/badenum.hlx (rev 0) +++ test/invalid/badenum.hlx 2006-07-12 01:28:36 UTC (rev 419) @@ -0,0 +1,11 @@ + + + + + + + + item2 + + + From rspencer at reidspencer.com Tue Jul 11 18:30:02 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Tue, 11 Jul 2006 18:30:02 -0700 Subject: [hlvm-commits] r420 - test/invalid Message-ID: <200607120130.k6C1U20u010453@server1.hlvm.org> Author: reid Date: 2006-07-11 18:30:02 -0700 (Tue, 11 Jul 2006) New Revision: 420 Log: A test case for bad character constants. Added: test/invalid/badchar.hlx Added: test/invalid/badchar.hlx =================================================================== --- test/invalid/badchar.hlx (rev 0) +++ test/invalid/badchar.hlx 2006-07-12 01:30:02 UTC (rev 420) @@ -0,0 +1,8 @@ + + + + + #*** + + + From rspencer at reidspencer.com Wed Jul 12 00:27:28 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Wed, 12 Jul 2006 00:27:28 -0700 Subject: [hlvm-commits] r421 - test/lib Message-ID: <200607120727.k6C7RSfJ011699@server1.hlvm.org> Author: reid Date: 2006-07-12 00:27:28 -0700 (Wed, 12 Jul 2006) New Revision: 421 Log: Don't fail when we should pass! Modified: test/lib/generate.exp Modified: test/lib/generate.exp =================================================================== --- test/lib/generate.exp 2006-07-12 01:30:02 UTC (rev 420) +++ test/lib/generate.exp 2006-07-12 07:27:28 UTC (rev 421) @@ -68,7 +68,7 @@ fail "$test: $testexe return $status\n$msg" } } else { - fail "$test: $testexe return $retval\n$msg" + pass $test; } } } From rspencer at reidspencer.com Wed Jul 12 00:28:35 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Wed, 12 Jul 2006 00:28:35 -0700 Subject: [hlvm-commits] r422 - tools/hlvm-gentestcase Message-ID: <200607120728.k6C7SZKv011718@server1.hlvm.org> Author: reid Date: 2006-07-12 00:28:35 -0700 (Wed, 12 Jul 2006) New Revision: 422 Log: Generate tests for hexadecimal Unicode character constants as well. Also make sure we don't generate a single # which is invalid. Modified: tools/hlvm-gentestcase/Generate.cpp Modified: tools/hlvm-gentestcase/Generate.cpp =================================================================== --- tools/hlvm-gentestcase/Generate.cpp 2006-07-12 07:27:28 UTC (rev 421) +++ tools/hlvm-gentestcase/Generate.cpp 2006-07-12 07:28:35 UTC (rev 422) @@ -278,7 +278,17 @@ case CharacterTypeID: { std::string val; - val += char(randRange(35,126)); + if ( randRange(0,20) < Complexity ) { + static char hexDigits[16] = { + '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; + val = '#'; + val += hexDigits[ randRange(0,15) ]; + val += hexDigits[ randRange(0,15) ]; + val += hexDigits[ randRange(0,15) ]; + val += hexDigits[ randRange(0,15) ]; + } else { + val += char(randRange(36,126)); + } C = ast->new_ConstantCharacter( std::string("cchar_") + utostr(line), bundle,Ty, val, loc); break; From rspencer at reidspencer.com Wed Jul 12 00:38:39 2006 From: rspencer at reidspencer.com (rspencer at reidspencer.com) Date: Wed, 12 Jul 2006 00:38:39 -0700 Subject: [hlvm-commits] r423 - test/generate Message-ID: <200607120738.k6C7cdlt011755@server1.hlvm.org> Author: reid Date: 2006-07-12 00:38:39 -0700 (Wed, 12 Jul 2006) New Revision: 423 Log: Update this to seed with a randomly generated number so batch of tests are not "related". Modified: test/generate/dg.exp Modified: test/generate/dg.exp =================================================================== --- test/generate/dg.exp 2006-07-12 07:28:35 UTC (rev 422) +++ test/generate/dg.exp 2006-07-12 07:38:39 UTC (rev 423) @@ -1,13 +1,17 @@ load_lib generate.exp hlvm-generate-test 1 1 1 0 +hlvm-generate-test 1 4 3 1152485648 +hlvm-generate-test 2 2 3 1152485648 -set seed [ clock seconds ] +proc random {{range 100}} { + return [expr {int(rand()*$range)}] +} -for { set complexity 1 } { $complexity < 5 } { incr complexity } { - for { set typecmplxt 1 } { $typecmplxt < 5 } { incr typecmplxt } { - for { set size 1 } { $size < 5 } { incr size } { - hlvm-generate-test $complexity $typecmplxt $size $seed +for { set complexity 1 } { $complexity < 10 } { incr complexity } { + for { set typecmplxt 1 } { $typecmplxt < 6 } { incr typecmplxt } { + for { set size 1 } { $size < 10 } { incr size } { + hlvm-generate-test $complexity $typecmplxt $size [random [clock second] ] } } }