presentation of tc-6tiger/lecture-notes/slides/tc/tc-6.pdf · yaka presentation of tc-6 2 / 13....

22
Presentation of TC-6 Assistants 2009 May 6, 2014

Upload: others

Post on 11-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Presentation of TC-6

Assistants 2009

May 6, 2014

Page 2: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Presentation of TC-6

1 Overview of the tarball

2 C++ notions

YAKA Presentation of TC-6 2 / 13

Page 3: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarball

1 Overview of the tarball

2 C++ notions

Page 4: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

The tree structure of TC-6

New directory:

‘src/canon’: Definition of classes for canonization.

YAKA Presentation of TC-6 4 / 13

Page 5: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

The tree structure of TC-6

New directory:

‘src/canon’: Definition of classes for canonization.

YAKA Presentation of TC-6 4 / 13

Page 6: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Code to write

Canonicalize the tree: lift ESEQ higher.

Basic blocks creation.

Traces creation.

Other things you need. . .

YAKA Presentation of TC-6 5 / 13

Page 7: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Code to write

Canonicalize the tree: lift ESEQ higher.

Basic blocks creation.

Traces creation.

Other things you need. . .

YAKA Presentation of TC-6 5 / 13

Page 8: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Code to write

Canonicalize the tree: lift ESEQ higher.

Basic blocks creation.

Traces creation.

Other things you need. . .

YAKA Presentation of TC-6 5 / 13

Page 9: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Code to write

Canonicalize the tree: lift ESEQ higher.

Basic blocks creation.

Traces creation.

Other things you need. . .

YAKA Presentation of TC-6 5 / 13

Page 10: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

C++ notions

1 Overview of the tarball

2 C++ notionsFunctional programming

Page 11: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Functional programming

1 Overview of the tarball

2 C++ notionsFunctional programming

Page 12: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Using the STL

Using the STL instead of hand written manipulators, etc. is:

Cleaner, more readable

More reliable (the STL is well tested)

Easier to maintain.

YAKA Presentation of TC-6 8 / 13

Page 13: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Using the STL

Using the STL instead of hand written manipulators, etc. is:

Cleaner, more readable

More reliable (the STL is well tested)

Easier to maintain.

YAKA Presentation of TC-6 8 / 13

Page 14: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Using the STL

Using the STL instead of hand written manipulators, etc. is:

Cleaner, more readable

More reliable (the STL is well tested)

Easier to maintain.

YAKA Presentation of TC-6 8 / 13

Page 15: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Functors

Functors are objects that behave like functions by overloading theoperator().To use functors in the STL algorithms, derive from the STLstd::unary function or std::binary function.// This is a predicate, suitable for STL algorithms

// such as std::find_if.

struct block_frontier_p

: public std::unary_function<tree::rTree, bool>

{

bool

operator() (const tree::rTree& tree) const

{

return (tree.is_a<tree::Label> ()

|| tree.is_a<tree::Jump> ()

|| tree.is_a<tree::Cjump> ());

}

};

YAKA Presentation of TC-6 9 / 13

Page 16: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Functors as predicates

Functors are generally used to implement predicates.

Return Booleans

Action on elements can depend on a predicate.

YAKA Presentation of TC-6 10 / 13

Page 17: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Functors as predicates

Functors are generally used to implement predicates.

Return Booleans

Action on elements can depend on a predicate.

YAKA Presentation of TC-6 10 / 13

Page 18: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

STL algorithms

Many useful algorithms are provided by STL. Here are someexamples:

// Move items in the range [l.begin (), l.end ()) from l

// to dest. Insertions take place at the beginning of dest.

dest.splice (dest.begin(), l, l.begin (), l.end ());

// Merge sorted containers into dest_sorted_list.

dest_sorted_list.merge (sorted_list);

YAKA Presentation of TC-6 11 / 13

Page 19: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

STL algorithms

// Returns the first iterator i in the range [first, last)

// such that pred(*i) is true. Returns last if no such

// iterator exists.

find_if (asm.begin (),asm.end (), block_frontier_p ());

// for_each applies the function object f to each element

// in the range [first, last)

template<typename Container>

void

deep_clear (Container& c)

{

std::for_each (c.begin (), c.end (),

Delete<typename Container::value_type> ());

c.clear ();

}

YAKA Presentation of TC-6 12 / 13

Page 20: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Using Boost::Lambda

Writing functors and use them once is too much work.

Placeholders: X = Y ∗ Z is equivalent to 1 = 2 ∗ 3

Unnamed functions are so convenient// Print elements in a.

for_each (a.begin (), a.end (), (std::cout << _1 << ’ ’));

// Print only labels in a.

for_each (a.begin (), a.end (),

if_(is_a<tree::Label> (_1))[ std::cout << _1 ]);

Bind expressions// Find labels in a.

find_if (a.begin (), a.end (),

(bind (&is_a<tree::Label>, _1)));

YAKA Presentation of TC-6 13 / 13

Page 21: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Using Boost::Lambda

Writing functors and use them once is too much work.

Placeholders: X = Y ∗ Z is equivalent to 1 = 2 ∗ 3

Unnamed functions are so convenient// Print elements in a.

for_each (a.begin (), a.end (), (std::cout << _1 << ’ ’));

// Print only labels in a.

for_each (a.begin (), a.end (),

if_(is_a<tree::Label> (_1))[ std::cout << _1 ]);

Bind expressions// Find labels in a.

find_if (a.begin (), a.end (),

(bind (&is_a<tree::Label>, _1)));

YAKA Presentation of TC-6 13 / 13

Page 22: Presentation of TC-6tiger/lecture-notes/slides/tc/tc-6.pdf · YAKA Presentation of TC-6 2 / 13. Overview of the tarball 1 Overview of the tarball 2 C++ notions. Overview of the tarball

Overview of the tarballC++ notions

Functional programming

Using Boost::Lambda

Writing functors and use them once is too much work.

Placeholders: X = Y ∗ Z is equivalent to 1 = 2 ∗ 3

Unnamed functions are so convenient// Print elements in a.

for_each (a.begin (), a.end (), (std::cout << _1 << ’ ’));

// Print only labels in a.

for_each (a.begin (), a.end (),

if_(is_a<tree::Label> (_1))[ std::cout << _1 ]);

Bind expressions// Find labels in a.

find_if (a.begin (), a.end (),

(bind (&is_a<tree::Label>, _1)));

YAKA Presentation of TC-6 13 / 13