Online Mind Mapping and Brainstorming

Create your own awesome maps

Online Mind Mapping and Brainstorming

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account? Log In

llvm source review by Mind Map: llvm source review
0.0 stars - reviews range from 0 to 5

llvm source review

Build してる pass は

AS DS は値が返るべきノードのこと

AST ではないけど、パースしてく時の状態を持ち歩いている

上記をパラメタとした状態遷移マシン

Memo

C++を書く人は構造体を使わない

llvm のコメントは謝罪が多い

いちいち cd 使わない

Global-Font-Lock

llvmのインスタンスは大文字

C++は使わない関数はリンクされない

処理が分かるコメントが良い

pointee

llvm は assert が多い

scope spec 括弧の範囲

C++は引数が増える

Parser は小ルーチンで動く

ライセンスはライセンスを見ろ、というコメントはGood

Cのラベル

LHS left hand side

大きなソースを読むときにtabを使うのは良くない

NameDeclとわかった瞬間にそれを作っておく。

SS -> ScopeSpec

unresolvedlookExpr まだ解決していない変数 a * b の途中の「 a *」とか

LookupResult

ResがもうASTになっているはず。

DeclRefExpr

ReaはもうAST。GetStmtClassNameで実際のクラス名を取ることができる。

ADL:UseArgumentDependentLookup

Stmt でキャスト

getStmtClassName() で辿れる

通常で false を返すものは書くな

コード生成はできるだけ遅らせる

fghfghfg

コード中に C++ は記述できないので CXX と記述している

fghfghfg

ダメなコメントばっかり

p してもまったくわけがわからないのはちょっと

include がそばにないとダメ

publicは普通上だろ

doit とか最低

綺麗に書くと遅いことが多い

いかにも頭の良い人が書いたソース

巨大なデータ構造をスタックに置きたがる

FI -> CGFunctionInfos

clang の途中で llvm にしなかったのは謎

最初の一回だけ特別扱いするのはダサい書き方

ABI -> ApplicationBinaryInterface

llvm はほとんど for 文で書かれている

haskell に for 文はないのでこんな書き方できない

C++のnewは重い

DenseMapはハッシュテーブル

人が読みやすいように出せないのかよ

return twiceはgccの専門用語

QualType は const とか volatile とか

return の処理はけっこう重い

instructions と instruction がある

AggValueSlot

あめのひはソースをよもう

スコープの実装

Init->dump()

ローカル変数だからGCする必要なし

visitor pattern

デザインパターンは基本的にアンチパターン

virtual

Macho は MacOS のこと

DwarfException

driver.cpp

argv[0]

OwningPtr.h

llvm/Support/Compiler.hで全部入る

namespace llvm

LLVM_DELETED_FUNCTION

reset()

&operator()

コンパイラインスタンスが入っているポインタ

cc1_main.cpp

Clang->getFrontendOpts().Plugins

IntrusiveRefCntPtr.h

リファレンスカウンタを持っている

ref_cnt

Retain()

Release()

getPtr()

CompilerInstance.cpp

FrontendAction.cpp

CodeGenAction.cpp

ParseAST.cpp

C++ 時点で弾いてる。構文解析もしない

ParseAST.h

AST.h

Decl.h

tree を表すオブジェクト

compile するとき Type Location が必要

ASTContext

lvalue

MaxFunctionScopeDepth

宣言の構文

getName()

Expr.h

式の構文

Stmt.h

Preprocessor.cpp

SourceManager.cpp

include とかを処理

BufStr にソース読み込まれてる

EnterSourceFile へ

Lexer.cpp

LexTokenInternal

もっとでかくてわかりにくい関数にコメントつけろよ

コメントがいいよなあ

最初の方に書いた部分

if 文で書くより switch のが速い?

if 文を排除する試みが多い

UCN はダメなもの? 恐らく Unicode? UpperCase~

SourceLocation.h

Parser.cpp

Tok

Parsed AttributesWithRange __xx__ のやつ

ParseDecl.cpp

parseattribute ソースコードのどこかを begin と end で示している

writtenBS は中括弧とかでたら保持

altivec

switch 文 -> int i [] とか

(gdb) p Tok でトークン見れます

goto で switch 文の中に飛び込む…

imaginary int とか。imaginary は複素数

Preprocessor.h

Lexer.h

ResultStartToken がいる

ModuleBuilder.cpp

Builder

cast<hoge> と (hoge) は同じはず

getType().arrangeGlobalDeclaration

CodeGenModule へ

GlobalDecl へ

CGCall へ

Function.h

CodeGeneration

ResTy.dump()

引数を評価する順が決まっている

BBはBasicBlock

普通はBuilderを使ってBBを作っている

SetInsertPoint

ReturnValueを作る理由

EmitStmt

BackendUtil

オプション関係の処理

EmitAssemblyHelper

FunctionPassManager

cl

PassManager へ

X86AsmPrinter.cpp

COFF

AsmPrinter へ

AsmPrinter.h

間接呼び出しされる