(I); ++I) {
+ int BlockIdx = PN->getBasicBlockIndex(OrigBlock);
+ assert(BlockIdx != -1 && "Switch didn't go to this successor??");
+ PN->setIncomingBlock((unsigned)BlockIdx, CurBlock);
+ }
+ }
+
CurBlock = NextBlock; // Move on to the next condition
}
-
// We are now done with the switch instruction, delete it.
delete SI;
From lattner at cs.uiuc.edu Fri May 2 11:20:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 11:20:01 2003
Subject: [llvm-commits] CVS: llvm/www/pubs/
Message-ID: <200305021619.LAA00469@apoc.cs.uiuc.edu>
Changes in directory llvm/www/pubs:
---
Log message:
Directory /home/vadve/vadve/Research/DynOpt/CVSRepository/llvm/www/pubs added to the repository
---
Diffs of the changes:
From lattner at cs.uiuc.edu Fri May 2 11:30:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 11:30:01 2003
Subject: [llvm-commits] CVS: llvm/www/pubs/2003-05-01-GCCSummit2003.html
Message-ID: <200305021629.LAA10277@tank.cs.uiuc.edu>
Changes in directory llvm/www/pubs:
2003-05-01-GCCSummit2003.html added (r1.1)
---
Log message:
Add description page for GCC summit paper
---
Diffs of the changes:
Index: llvm/www/pubs/2003-05-01-GCCSummit2003.html
diff -c /dev/null llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.1
*** /dev/null Fri May 2 11:29:12 2003
--- llvm/www/pubs/2003-05-01-GCCSummit2003.html Fri May 2 11:29:01 2003
***************
*** 0 ****
--- 1,42 ----
+
+
+
+ Architecture for a Next-Generation GCC
+
+
+
+
+
Architecture for a Next-Generation
+ GCC
+
+ Abstract:
+
+ This paper presents a design and implementation of a whole-program
+ interprocedural optimizer built in the GCC framework. Through the introduction
+ of a new language-independent intermediate representation, we extend the current
+ GCC architecture to include a powerful mid-level optimizer and add link-time
+ interprocedural analysis and optimization capabilities. This intermediate
+ representation is an SSA-based, low-level, strongly-typed, representation which
+ is designed to support both efficient global optimizations and high-level
+ analyses. Because most of the program is available at link-time, aggressive
+ ``whole-program'' optimizations and analyses are possible, improving the time
+ and space requirements of compiled programs. The final proposed organization of
+ GCC retains the important features which make it successful today, requires
+ almost no modification to either the front- or back-ends of GCC, and is
+ completely compatible with user makefiles.
+
+
+ Published:
+
+
+
+ Download:
+
+
+
From lattner at cs.uiuc.edu Fri May 2 11:35:00 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 11:35:00 2003
Subject: [llvm-commits] CVS: llvm/www/pubs/2003-05-01-GCCSummit2003.html
Message-ID: <200305021634.LAA10315@tank.cs.uiuc.edu>
Changes in directory llvm/www/pubs:
2003-05-01-GCCSummit2003.html updated: 1.1 -> 1.2
---
Log message:
Add pub date
---
Diffs of the changes:
Index: llvm/www/pubs/2003-05-01-GCCSummit2003.html
diff -u llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.1 llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.2
--- llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.1 Fri May 2 11:29:01 2003
+++ llvm/www/pubs/2003-05-01-GCCSummit2003.html Fri May 2 11:34:21 2003
@@ -29,7 +29,8 @@
Published:
From lattner at cs.uiuc.edu Fri May 2 11:36:00 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 11:36:00 2003
Subject: [llvm-commits] CVS: llvm/www/www-index.html
Message-ID: <200305021635.LAA10338@tank.cs.uiuc.edu>
Changes in directory llvm/www:
www-index.html updated: 1.25 -> 1.26
---
Log message:
Add link to GCC summit paper, clean up markup
---
Diffs of the changes:
Index: llvm/www/www-index.html
diff -u llvm/www/www-index.html:1.25 llvm/www/www-index.html:1.26
--- llvm/www/www-index.html:1.25 Wed Apr 30 09:17:59 2003
+++ llvm/www/www-index.html Fri May 2 11:35:03 2003
@@ -1,6 +1,4 @@
-
-
-
+
The LLVM Compiler Infrastructure Project
@@ -102,12 +100,19 @@
- "Architecture
+ For a Next-Generation GCC"
+ Chris Lattner & Vikram Adve, Proc.
+ 2003 GCC
+ Summit, Ottawa, CA, May 2003.
+
+ - "Data
Structure Analysis: An Efficient Context-Sensitive
Heap Analysis"
- Chris Lattner & Vikram Adve, Technical
+ Chris Lattner & Vikram Adve, Technical
Report #UIUCDCS-R-2003-2340, Computer
- Science Dept., Univ. of Illinois,
+ Science Dept., Univ. of Illinois,
Apr. 2003.
- "LLVM:
@@ -118,17 +123,17 @@
Code Safety Without Runtime Checks for
Real-Time Control Systems"
Sumant Kowshik, Dinakar Dhurjati, and
- Vikram Adve. Proc. Intl Conf. on
+ Vikram Adve. Proc. Int'l Conf. on
Compilers, Architecture and Synthesis for
- Embedded Systems (CASES02), Grenoble,
+ Embedded Systems (CASES02), Grenoble,
France, Oct. 2002.
- "The
LLVM Instruction Set and Compilation
Strategy"
- Chris Lattner & Vikram Adve, Technical
+ Chris Lattner & Vikram Adve, Technical
Report #UIUCDCS-R-2002-2292, Computer
- Science Dept., Univ. of Illinois,
+ Science Dept., Univ. of Illinois,
Aug. 2002.
- "ACM
SIGPLAN Workshop on Memory System
- Performance (MSP),
+ Performance (MSP),
Berlin, Germany, June 2002.
(Presentation).
From lattner at cs.uiuc.edu Fri May 2 11:44:00 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 11:44:00 2003
Subject: [llvm-commits] CVS: llvm/www/pubs/2003-05-01-GCCSummit2003.html
Message-ID: <200305021643.LAA10394@tank.cs.uiuc.edu>
Changes in directory llvm/www/pubs:
2003-05-01-GCCSummit2003.html updated: 1.2 -> 1.3
---
Log message:
Add authors, make the links more google friendly hopefully
---
Diffs of the changes:
Index: llvm/www/pubs/2003-05-01-GCCSummit2003.html
diff -u llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.2 llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.3
--- llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.2 Fri May 2 11:34:21 2003
+++ llvm/www/pubs/2003-05-01-GCCSummit2003.html Fri May 2 11:42:56 2003
@@ -8,7 +8,12 @@
Architecture for a Next-Generation
-GCC
+ GCC
+ Chris Lattner and
+ Vikram Adve
+
+
+
Abstract:
@@ -36,8 +41,8 @@
Download:
From lattner at cs.uiuc.edu Fri May 2 12:35:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 12:35:01 2003
Subject: [llvm-commits] CVS: llvm/www/pubs/2003-05-01-GCCSummit2003.html
Message-ID: <200305021734.MAA11263@tank.cs.uiuc.edu>
Changes in directory llvm/www/pubs:
2003-05-01-GCCSummit2003.html updated: 1.3 -> 1.4
---
Log message:
Fix citation
Add bibtex entry
---
Diffs of the changes:
Index: llvm/www/pubs/2003-05-01-GCCSummit2003.html
diff -u llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.3 llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.4
--- llvm/www/pubs/2003-05-01-GCCSummit2003.html:1.3 Fri May 2 11:42:56 2003
+++ llvm/www/pubs/2003-05-01-GCCSummit2003.html Fri May 2 12:33:50 2003
@@ -34,15 +34,29 @@
Published:
-
Download:
+
+Bibtex Entry:
+
+ @inproceedings{LattnerAdve:GCCSummit03,
+ Author = {Chris Lattner and Vikram Adve},
+ Title = {{A}rchitecture for a {N}ext-{G}eneration {GCC}},
+ Booktitle = {Proc. First Annual GCC Developers' Summit},
+ Address = {Ottawa, Canada},
+ Month = {May},
+ Year = {2003},
+ URL = {http://llvm.cs.uiuc.edu/pubs/2003-05-01-GCCSummit2003.html}
+ }
+
From lattner at cs.uiuc.edu Fri May 2 12:35:05 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 12:35:05 2003
Subject: [llvm-commits] CVS: llvm/www/www-index.html
Message-ID: <200305021734.MAA11288@tank.cs.uiuc.edu>
Changes in directory llvm/www:
www-index.html updated: 1.26 -> 1.27
---
Log message:
Ottawa is in Canada, not california
---
Diffs of the changes:
Index: llvm/www/www-index.html
diff -u llvm/www/www-index.html:1.26 llvm/www/www-index.html:1.27
--- llvm/www/www-index.html:1.26 Fri May 2 11:35:03 2003
+++ llvm/www/www-index.html Fri May 2 12:34:19 2003
@@ -102,9 +102,10 @@
- "Architecture
For a Next-Generation GCC"
- Chris Lattner & Vikram Adve, Proc.
- 2003 GCC
- Summit, Ottawa, CA, May 2003.
+ Chris Lattner & Vikram Adve,
+ First
+ Annual GCC Developers' Summit,
+ Ottawa, Canada, May 2003.
- "Data
From lattner at cs.uiuc.edu Fri May 2 13:20:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 13:20:01 2003
Subject: [llvm-commits] CVS: llvm/tools/gccas/gccas.cpp
Message-ID: <200305021819.NAA03332@apoc.cs.uiuc.edu>
Changes in directory llvm/tools/gccas:
gccas.cpp updated: 1.62 -> 1.63
---
Log message:
Add an instcombine pass before levelraise
---
Diffs of the changes:
Index: llvm/tools/gccas/gccas.cpp
diff -u llvm/tools/gccas/gccas.cpp:1.62 llvm/tools/gccas/gccas.cpp:1.63
--- llvm/tools/gccas/gccas.cpp:1.62 Thu Apr 24 14:10:07 2003
+++ llvm/tools/gccas/gccas.cpp Fri May 2 13:19:05 2003
@@ -70,6 +70,7 @@
addPass(PM, createVerifierPass()); // Verify that input is correct
addPass(PM, createDeadInstEliminationPass()); // Remove Dead code/vars
addPass(PM, createRaiseAllocationsPass()); // call %malloc -> malloc inst
+ addPass(PM, createInstructionCombiningPass()); // Cleanup code for raise
addPass(PM, createIndVarSimplifyPass()); // Simplify indvars
addPass(PM, createRaisePointerReferencesPass());// Recover type information
addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
From lattner at cs.uiuc.edu Fri May 2 13:41:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 13:41:01 2003
Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Fhourstones/time.c
Message-ID: <200305021840.NAA06798@apoc.cs.uiuc.edu>
Changes in directory llvm/test/Programs/MultiSource/Fhourstones:
time.c updated: 1.1 -> 1.2
---
Log message:
Don't break diffs by actually including timeing information
---
Diffs of the changes:
Index: llvm/test/Programs/MultiSource/Fhourstones/time.c
diff -u llvm/test/Programs/MultiSource/Fhourstones/time.c:1.1 llvm/test/Programs/MultiSource/Fhourstones/time.c:1.2
--- llvm/test/Programs/MultiSource/Fhourstones/time.c:1.1 Wed Oct 2 14:30:25 2002
+++ llvm/test/Programs/MultiSource/Fhourstones/time.c Fri May 2 13:40:36 2003
@@ -9,6 +9,8 @@
int64 millisecs()
{
struct rusage rusage;
+ static int64 Time = 0;
+ return ++Time; /* DO NOT TIME FOR LLVM */
getrusage(RUSAGE_SELF,&rusage);
return rusage.ru_utime.tv_sec * 1000 + rusage.ru_utime.tv_usec / 1000;
From lattner at cs.uiuc.edu Fri May 2 13:46:24 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 13:46:24 2003
Subject: [llvm-commits] CVS: llvm/lib/CodeGen/PrologEpilogInserter.cpp
Message-ID: <200305021844.NAA06971@apoc.cs.uiuc.edu>
Changes in directory llvm/lib/CodeGen:
PrologEpilogInserter.cpp updated: 1.9 -> 1.10
---
Log message:
Fix a bug which occurred with empty basic blocks
---
Diffs of the changes:
Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp
diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.9 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.10
--- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.9 Thu Jan 16 12:06:43 2003
+++ llvm/lib/CodeGen/PrologEpilogInserter.cpp Fri May 2 13:44:42 2003
@@ -160,7 +160,7 @@
const TargetInstrInfo &TII = Fn.getTarget().getInstrInfo();
for (MachineFunction::iterator FI = Fn.begin(), E = Fn.end(); FI != E; ++FI) {
// If last instruction is a return instruction, add an epilogue
- if (TII.isReturn(FI->back()->getOpcode())) {
+ if (!FI->empty() && TII.isReturn(FI->back()->getOpcode())) {
MBB = FI; I = MBB->end()-1;
for (unsigned i = 0, e = RegsToSave.size(); i != e; ++i) {
From lattner at cs.uiuc.edu Fri May 2 14:27:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 14:27:01 2003
Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/Reassociate.cpp
Message-ID: <200305021926.OAA07683@apoc.cs.uiuc.edu>
Changes in directory llvm/lib/Transforms/Scalar:
Reassociate.cpp updated: 1.17 -> 1.18
---
Log message:
Fix spelling
---
Diffs of the changes:
Index: llvm/lib/Transforms/Scalar/Reassociate.cpp
diff -u llvm/lib/Transforms/Scalar/Reassociate.cpp:1.17 llvm/lib/Transforms/Scalar/Reassociate.cpp:1.18
--- llvm/lib/Transforms/Scalar/Reassociate.cpp:1.17 Wed Apr 23 11:37:42 2003
+++ llvm/lib/Transforms/Scalar/Reassociate.cpp Fri May 2 14:26:34 2003
@@ -1,7 +1,7 @@
//===- Reassociate.cpp - Reassociate binary expressions -------------------===//
//
// This pass reassociates commutative expressions in an order that is designed
-// to promote better constant propogation, GCSE, LICM, PRE...
+// to promote better constant propagation, GCSE, LICM, PRE...
//
// For example: 4 + (x + 5) -> x + (4 + 5)
//
From lattner at cs.uiuc.edu Fri May 2 14:33:02 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 14:33:02 2003
Subject: [llvm-commits] CVS: llvm/lib/Transforms/LevelRaise.cpp
Message-ID: <200305021932.OAA07716@apoc.cs.uiuc.edu>
Changes in directory llvm/lib/Transforms:
LevelRaise.cpp updated: 1.80 -> 1.81
---
Log message:
Attempt to fix sumant's typesafety issue
---
Diffs of the changes:
Index: llvm/lib/Transforms/LevelRaise.cpp
diff -u llvm/lib/Transforms/LevelRaise.cpp:1.80 llvm/lib/Transforms/LevelRaise.cpp:1.81
--- llvm/lib/Transforms/LevelRaise.cpp:1.80 Thu May 1 16:02:53 2003
+++ llvm/lib/Transforms/LevelRaise.cpp Fri May 2 14:32:04 2003
@@ -107,33 +107,40 @@
CastInst &CI = cast(*BI);
if (CI.use_empty()) return false;
- // Scan all of the uses, looking for any uses that are not add
+ // Scan all of the uses, looking for any uses that are not add or sub
// instructions. If we have non-adds, do not make this transformation.
//
+ bool HasSubUse = false; // Keep track of any subtracts...
for (Value::use_iterator I = CI.use_begin(), E = CI.use_end();
- I != E; ++I) {
+ I != E; ++I)
if (BinaryOperator *BO = dyn_cast(*I)) {
- if (BO->getOpcode() != Instruction::Add ||
+ if ((BO->getOpcode() != Instruction::Add &&
+ BO->getOpcode() != Instruction::Sub) ||
// Avoid add sbyte* %X, %X cases...
BO->getOperand(0) == BO->getOperand(1))
return false;
+ else
+ HasSubUse |= BO->getOpcode() == Instruction::Sub;
} else {
return false;
}
- }
std::vector Indices;
Value *Src = CI.getOperand(0);
const Type *Result = ConvertableToGEP(DestPTy, Src, Indices, TD, &BI);
if (Result == 0) return false; // Not convertable...
+ // Cannot handle subtracts if there is more than one index required...
+ if (HasSubUse && Indices.size() != 1) return false;
+
PRINT_PEEPHOLE2("cast-add-to-gep:in", Src, CI);
// If we have a getelementptr capability... transform all of the
// add instruction uses into getelementptr's.
while (!CI.use_empty()) {
BinaryOperator *I = cast(*CI.use_begin());
- assert(I->getOpcode() == Instruction::Add && I->getNumOperands() == 2 &&
+ assert((I->getOpcode() == Instruction::Add ||
+ I->getOpcode() == Instruction::Sub) &&
"Use is not a valid add instruction!");
// Get the value added to the cast result pointer...
@@ -141,6 +148,15 @@
Instruction *GEP = new GetElementPtrInst(OtherPtr, Indices, I->getName());
PRINT_PEEPHOLE1("cast-add-to-gep:i", I);
+
+ // If the instruction is actually a subtract, we are guaranteed to only have
+ // one index (from code above), so we just need to negate the pointer index
+ // long value.
+ if (I->getOpcode() == Instruction::Sub) {
+ Instruction *Neg = BinaryOperator::createNeg(GEP->getOperand(1),
+ GEP->getOperand(1)->getName()+".neg", I);
+ GEP->setOperand(1, Neg);
+ }
if (GEP->getType() == I->getType()) {
// Replace the old add instruction with the shiny new GEP inst
From brukman at cs.uiuc.edu Fri May 2 21:17:01 2003
From: brukman at cs.uiuc.edu (Misha Brukman)
Date: Fri May 2 21:17:01 2003
Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.cpp
Message-ID: <200305030216.VAA13635@apoc.cs.uiuc.edu>
Changes in directory llvm/tools/bugpoint:
BugDriver.cpp updated: 1.5 -> 1.6
---
Log message:
The Grammar Police is out on patrol.
---
Diffs of the changes:
Index: llvm/tools/bugpoint/BugDriver.cpp
diff -u llvm/tools/bugpoint/BugDriver.cpp:1.5 llvm/tools/bugpoint/BugDriver.cpp:1.6
--- llvm/tools/bugpoint/BugDriver.cpp:1.5 Thu Apr 24 17:53:01 2003
+++ llvm/tools/bugpoint/BugDriver.cpp Fri May 2 21:16:43 2003
@@ -27,7 +27,7 @@
return Result;
}
-// DeleteFunctionBody - "Remove" the function by deleting all of it's basic
+// DeleteFunctionBody - "Remove" the function by deleting all of its basic
// blocks, making it external.
//
void DeleteFunctionBody(Function *F) {
From brukman at cs.uiuc.edu Fri May 2 21:19:01 2003
From: brukman at cs.uiuc.edu (Misha Brukman)
Date: Fri May 2 21:19:01 2003
Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp
Message-ID: <200305030218.VAA13787@apoc.cs.uiuc.edu>
Changes in directory llvm/lib/Target/X86:
InstSelectSimple.cpp updated: 1.90 -> 1.91
---
Log message:
The Hyphenation-Adding Committee is now in session.
---
Diffs of the changes:
Index: llvm/lib/Target/X86/InstSelectSimple.cpp
diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.90 llvm/lib/Target/X86/InstSelectSimple.cpp:1.91
--- llvm/lib/Target/X86/InstSelectSimple.cpp:1.90 Fri Apr 25 16:58:54 2003
+++ llvm/lib/Target/X86/InstSelectSimple.cpp Fri May 2 21:18:17 2003
@@ -1752,7 +1752,7 @@
// the stack pointer.
BuildMI(BB, X86::MOVrr32, 1, getReg(I)).addReg(X86::ESP);
- // Inform the Frame Information that we have just allocated a variable sized
+ // Inform the Frame Information that we have just allocated a variable-sized
// object.
F->getFrameInfo()->CreateVariableSizedObject();
}
From lattner at cs.uiuc.edu Fri May 2 22:10:01 2003
From: lattner at cs.uiuc.edu (Chris Lattner)
Date: Fri May 2 22:10:01 2003
Subject: [llvm-commits] CVS: llvm/test/Regression/CBackend/2002-08-19-ConstantExpr.ll 2002-08-19-HardConstantExpr.ll
Message-ID: <200305030309.WAA15879@apoc.cs.uiuc.edu>
Changes in directory llvm/test/Regression/CBackend:
2002-08-19-ConstantExpr.ll updated: 1.1 -> 1.2
2002-08-19-HardConstantExpr.ll updated: 1.1 -> 1.2
---
Log message:
Fix buggy tests
---
Diffs of the changes:
Index: llvm/test/Regression/CBackend/2002-08-19-ConstantExpr.ll
diff -u llvm/test/Regression/CBackend/2002-08-19-ConstantExpr.ll:1.1 llvm/test/Regression/CBackend/2002-08-19-ConstantExpr.ll:1.2
--- llvm/test/Regression/CBackend/2002-08-19-ConstantExpr.ll:1.1 Mon Aug 19 18:09:29 2002
+++ llvm/test/Regression/CBackend/2002-08-19-ConstantExpr.ll Fri May 2 22:08:54 2003
@@ -3,5 +3,5 @@
global float 0.0
%array = constant [2 x int] [ int 12, int 52 ]
-%arrayPtr = global int* getelementptr ([2 x int]* %array, uint 0, uint 0) ;; int* &%array[0][0]
+%arrayPtr = global int* getelementptr ([2 x int]* %array, long 0, long 0) ;; int* &%array[0][0]
Index: llvm/test/Regression/CBackend/2002-08-19-HardConstantExpr.ll
diff -u llvm/test/Regression/CBackend/2002-08-19-HardConstantExpr.ll:1.1 llvm/test/Regression/CBackend/2002-08-19-HardConstantExpr.ll:1.2
--- llvm/test/Regression/CBackend/2002-08-19-HardConstantExpr.ll:1.1 Mon Aug 19 18:10:52 2002
+++ llvm/test/Regression/CBackend/2002-08-19-HardConstantExpr.ll Fri May 2 22:08:54 2003
@@ -1,4 +1,3 @@
%array = constant [2 x int] [ int 12, int 52 ] ; <[2 x int]*> [#uses=1]
-%arrayPtr = global int* getelementptr ([2 x int]* %array, uint 0, uint 0) ; [#uses=1]
-%arrayPtr5 = global int* getelementptr (int** %arrayPtr, uint 0, uint 5) ;
|