gisel status 2017 final - llvmllvm.org/devmtg/2017-10/slides/bougacha-colombet-globalisel.pdf ·...

201
LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present, and Future

Upload: others

Post on 17-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

LLVM DevMtg October 2017

Ahmed Bougacha Quentin Colombet

GlobalISel Past, Present, and Future

Page 2: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

GlobalISel Recap

Page 4: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

GlobalISel Recap

Revamp of our instruction selection framework

LLVM Dev Meeting talks: https://www.youtube.com/watch?v=F6GGbYtae3g https://www.youtube.com/watch?v=6tfb344A7w8

Page 5: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

GlobalISel Recap

Revamp of our instruction selection framework

LLVM Dev Meeting talks: https://www.youtube.com/watch?v=F6GGbYtae3g https://www.youtube.com/watch?v=6tfb344A7w8

LLVM Dev RFCs: http://lists.llvm.org/pipermail/llvm-dev/2013-August/064696.html http://lists.llvm.org/pipermail/llvm-dev/2015-November/092566.html

Page 6: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

GlobalISel Pipeline

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

GenericMachineInstr MachineInstr

Page 7: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Past

Page 8: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Page 9: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 10: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 11: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 12: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 13: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 14: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 15: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 16: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_ADD %2, %1 %4(_,p0) = G_INTTOPTR %3

Page 17: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)%4(_,p0) = G_GEP %0, %1

Page 18: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)%4(_,p0) = G_GEP %0, %1

Alignment%0(_,p0) = COPY %x0

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_AND %2, %1 %4(_,p0) = G_INTTOPTR %3

%1(_,s64) = G_CONSTANT ~3

Page 19: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)%4(_,p0) = G_GEP %0, %1

Alignment%0(_,p0) = COPY %x0

%2(_,s64) = G_PTRTOINT %0 %3(_,s64) = G_AND %2, %1 %4(_,p0) = G_INTTOPTR %3

%1(_,s64) = G_CONSTANT ~3

Page 20: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)%4(_,p0) = G_GEP %0, %1

Alignment %0(_,p0) = COPY %x0%4(_,p0) = G_PTR_MASK %0, 2

Page 21: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Generic MachineInstr More Concise Type System

Displacement%0(_,p0) = COPY %x0 %1(_,s64) = G_CONSTANT 4

%5(_,s32) = G_LOAD %4(_,p0)%4(_,p0) = G_GEP %0, %1

Alignment %0(_,p0) = COPY %x0%4(_,p0) = G_PTR_MASK %0, 2

%0(_,p0) = COPY %x0 %1(_,s64) = G_PTRTOINT %0 %2(_,s64) = G_CONSTANT 4 %3(_,s64) = G_ADD %1, %2 %4(_,p0) = G_INTTOPTR %3 %5(_,s32) = G_LOAD %4(_,p0)

%0(_,p0) = COPY %x0 %1(_,s64) = G_PTRTOINT %0 %2(_,s64) = G_CONSTANT ~3 %3(_,s64) = G_AND %1, %2 %4(_,p0) = G_INTTOPTR %3

Page 22: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

Page 23: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

Page 24: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

Page 25: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓

Page 26: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓𐄂

Page 27: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓𐄂

Page 28: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓

Page 29: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓✓ Fallback

Page 30: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓✓✓

Fallback

Page 31: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓✓✓✓

Fallback

Page 32: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select

@fct1 ... @fctI ... @fctN

✓✓✓✓✓

Fallback

-global-isel-abort=0 or -global-isel-abort=2 (for warnings)

Page 33: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

@fct1 ... @fctI ... @fctN

✓✓✓✓✓

Fallback

-global-isel-abort=0 or -global-isel-abort=2 (for warnings)

Page 34: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

Page 35: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:... = op1 ......... = opN ...

Page 36: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = op1 ...

...

... = opN ...

Page 37: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = op1 ...

...

... = opN ...

Page 38: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

Page 39: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

Page 40: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

Page 41: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

✓ 𐄂

Page 42: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

✓ 𐄂

𐄂

Page 43: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

✓ 𐄂

𐄂

Page 44: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

fctI:

... = legOp1 ...

...

... = legOpN ...

✓ 𐄂

𐄂

-

Page 45: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

✓ ✓ 𐄂 -

fctI:... = legOp1 ... ... ... = legOpN ...

𐄂

Page 46: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

✓ ✓ 𐄂 -

fctI:... = legOp1 ... ... ... = legOpN ...

𐄂

Page 47: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

✓ ✓ 𐄂 -

fctI:

Page 48: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

✓ ✓ 𐄂 -

fctI:

Page 49: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Fallback to SelectionDAG Easier Bring Up

(G)MIIRTranslatorLLVM IR Legalizer RegBank Select MIInstruction

Select SDISelReset

Machine Function

✓ ✓ 𐄂 -

fctI:... = tgtOp1 ......... = tgtOpN ...

Page 50: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Page 51: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Page 52: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

What Changed?

Page 53: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

CallLowering API More instructions supported

What Changed?

Page 54: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Page 55: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

%6(_,s128) G_OR %4, %5=%6(_,s128) G_OR %4, %5=

Page 56: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

.low%6 (_,s64) = G_OR %4.low, %5.low

.high%6 (_,s64) = G_OR %4.high, %5.high

Page 57: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

%6(_,s128) =

%7(_,s64) = G_OR %4.low, %5.low%8(_,s64) = G_OR %4.high, %5.high

G_SEQUENCE %7 %8

Page 58: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

%6(_,s128) =

%7(_,s64) = G_OR %4.low, %5.low%8(_,s64) = G_OR %4.high, %5.high

G_SEQUENCE %7, %8

Page 59: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

%6(_,s128) =

%7(_,s64) = G_OR %4.low, %5.low%8(_,s64) = G_OR .high, .high

G_SEQUENCE %7, %8

Page 60: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_SEQUENCE %7, %8

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Page 61: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalizer Fundamentals

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_SEQUENCE %7, %8

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Page 62: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_SEQUENCE %7, %8

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

Page 63: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_SEQUENCE

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

Page 64: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_SEQUENCE

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

Page 65: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

Page 66: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

%0(_,s64), %1(_,s64) = G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

Same type

Page 67: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

%0(_,s64), %1(_,s64) =

Page 68: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_EXTRACT , 0, 64%4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

%0(_,s64), %1(_,s64) =

Page 69: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_UNMERGE_VALUES %4%2(_,s64), %3(_,s64) = G_EXTRACT , 0, 64%5

Legalization Artifacts Simpler More Regular Semantic

Same type

%7, %8

%0(_,s64), %1(_,s64) = G_UNMERGE_VALUES

Page 70: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_UNMERGE_VALUES %4%2(_,s64), %3(_,s64) = G_UNMERGE_VALUES %5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

%0(_,s64), %1(_,s64) =

Page 71: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_UNMERGE_VALUES %4%2(_,s64), %3(_,s64) = G_UNMERGE_VALUES %5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

%0(_,s64), %1(_,s64) =

• G_SEQUENCEs are gone

Page 72: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_UNMERGE_VALUES %4%2(_,s64), %3(_,s64) = G_UNMERGE_VALUES %5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

%0(_,s64), %1(_,s64) =

• G_SEQUENCEs are gone

• G_EXTRACTs still exist but have only one result

Page 73: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

%6(_,s128)=

%7(_,s64) = G_OR %0, %2%8(_,s64) = G_OR %1, %3

G_MERGE_VALUES

G_UNMERGE_VALUES %4%2(_,s64), %3(_,s64) = G_UNMERGE_VALUES %5

Legalization Artifacts Simpler More Regular Semantic

%7, %8

%0(_,s64), %1(_,s64) =

• G_SEQUENCEs are gone

• G_EXTRACTs still exist but have only one result

• G_[UN]MERGE_VALUES is used instead for these uses cases

Page 74: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Page 75: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

setAction({Opcode, [OpIdx,] Type}, Action)

Page 76: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

setAction({Opcode, [OpIdx,] Type}, Action)

Legal

Page 77: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

setAction({Opcode, [OpIdx,] Type}, Action)

LegalNarrowScalar

Page 78: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

setAction({Opcode, [OpIdx,] Type}, Action)

LegalNarrowScalarWidenScalar

Page 79: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

setAction({Opcode, [OpIdx,] Type}, Action)

LegalNarrowScalarWidenScalarFewerElementsMoreElements

LowerLibcallCustomUnsupportedNotFound

Page 80: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16) = G_UREM %1 %2,

Page 81: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({G_UREM, 0, s16}, LegalizerInfo::WidenScalar)

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16) = G_UREM %1 %2,

Page 82: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({G_UREM, 0, s16}, LegalizerInfo::WidenScalar)

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)= G_UREM

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT%5(_,s32)

= G_TRUNC %5%3 %4,

Page 83: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)= G_UREM

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT%5(_,s32)

= G_TRUNC %5%3 %4, %4%3

Page 84: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)= G_UREM

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT%5(_,s32)

= G_TRUNC %5%3 %4,

setAction({G_UREM, 0, s32}, LegalizerInfo::Lower) %4%3

Page 85: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,setAction({G_UREM, 0, s32}, LegalizerInfo::Lower) = G_UDIV

%7(_,s32) = G_MUL %6, = G_SUB , %7

%6(_,s32)

%3%4

Page 86: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,= G_UDIV%7(_,s32) = G_MUL %6,

= G_SUB , %7

%6(_,s32)

%3%4

Page 87: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,= G_UDIV%7(_,s32) = G_MUL %6,

= G_SUB , %7

%6(_,s32)

%3%4

setAction({G_SUB, 0, s32}, LegalizerInfo::Legal)

Page 88: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,= G_UDIV%7(_,s32) = G_MUL %6,

= G_SUB , %7

%6(_,s32)

%3%4

Page 89: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,= G_UDIV%7(_,s32) = G_MUL %6,

= G_SUB , %7

%6(_,s32)

%3%4

setAction({G_MUL, 0, s32}, LegalizerInfo::Legal)

Page 90: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,= G_UDIV%7(_,s32) = G_MUL %6,

= G_SUB , %7

%6(_,s32)

%3%4

Page 91: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3 %4,= G_UDIV%7(_,s32) = G_MUL %6,

= G_SUB , %7

%6(_,s32)

%3%4

setAction({G_UDIV, 0, s32}, LegalizerInfo::LibCall)

Page 92: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3

%7(_,s32) = G_MUL %6, = G_SUB , %7

%6(_,s32)

%3%4

setAction({G_UDIV, 0, s32}, LegalizerInfo::LibCall)

%r0 = COPY%4%r1 = COPY

= COPY %r0%r0 = BLX uidivmod %r0, %r1

Page 93: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Legalization Algorithm How Does It Work?

Legal NarrowScalar WidenScalar FewerElements MoreElements

Lower Libcall Custom Unsupported NotFound

setAction({Opcode, [OpIdx,] Type}, Action)

%0(_,s16)

%1%2

%3(_,s32) = G_ZEXT%4(_,s32) = G_ZEXT

%5(_,s32)= G_TRUNC %5

%3

%7(_,s32) = G_MUL %6, = G_SUB , %7

%6(_,s32)

%3%4

%r0 = COPY%4%r1 = COPY

= COPY %r0%r0 = BLX uidivmod %r0, %r1

%0(_,s16) = G_UREM %1 %2,

Page 94: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MI Legalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Page 95: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MILegalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Page 96: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MILegalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

What Changed?

Page 97: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MILegalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Partial TableGen support Statically allocated structures

What Changed?

Page 98: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

(G)MILegalizer RegBank Select

Instruction SelectIRTranslatorLLVM IR MI

Page 99: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

DAGISel Emitter [SD].inc

Page 100: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

DAGISel Emitter

GlobalISel Emitter

[SD].inc

[GI].inc

Page 101: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

Page 102: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

Page 103: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

Selection DAG

Compat.td

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

Page 104: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

Selection DAG

Compat.td

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

def : GINodeEquiv<G_ADD, add>;

Page 105: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

Selection DAG

Compat.td

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

def : GINodeEquiv<G_ADD, add>;

Page 106: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

Page 107: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

addsub_shifted_imm32

Page 108: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

addsub_shifted_imm32

Page 109: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

XXXInstr Info.td

addsub_shifted_imm32

def gi_addsub_shifted_imm32:

Page 110: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

addsub_shifted_imm32

XXXInstr Info.td

def gi_addsub_shifted_imm32:GIComplexOperandMatcher <s32, “selectArithImmed”>,

Page 111: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

def gi_addsub_shifted_imm32:GIComplexOperandMatcher <s32, “selectArithImmed”>,GIComplexPatternEquiv <addsub_shifted_imm32>;

addsub_shifted_imm32

XXXInstr Info.td

Page 112: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

def gi_addsub_shifted_imm32:GIComplexOperandMatcher <s32, “selectArithImmed”>,GIComplexPatternEquiv <addsub_shifted_imm32>;

addsub_shifted_imm32

XXXInstr Info.td

Page 113: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

Page 114: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

bool AArch64DAGToDAGISel:: SelectArithImmed( SDValue N, [...])

Page 115: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

bool AArch64DAGToDAGISel:: SelectArithImmed( SDValue N, [...])

Page 116: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

class addsub_shifted_imm<i32> : Operand<i32>, ComplexPattern<i32, 2, “SelectArithImmed", [imm]>

bool AArch64DAGToDAGISel:: SelectArithImmed( SDValue N, [...])

InstructionSelector::ComplexRendererFn AArch64InstructionSelector:: selectArithImmed( MachineOperand &Root) const

Page 117: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

Page 118: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

GIR_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

GIR_ComplexRenderer, [...]GIR_EraseFromParent, /*InsnID*/0,

GIR_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

Page 119: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

GIR_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

GIR_ComplexRenderer, [...]GIR_EraseFromParent, /*InsnID*/0,

GIR_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

Page 120: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

GIR_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

GIR_ComplexRenderer, [...]GIR_EraseFromParent, /*InsnID*/0,

GIR_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

Page 121: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

_ComplexRenderer, [...] _EraseFromParent, /*InsnID*/0,

_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

GIR

GIRGIR

GIR

Page 122: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

_ComplexRenderer, [...] _EraseFromParent, /*InsnID*/0,

_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

GIR

GIRGIR

GIR

Page 123: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

_ComplexRenderer, [...] _EraseFromParent, /*InsnID*/0,

_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

GIR

GIRGIR

GIR

Page 124: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

_ComplexRenderer, [...] _EraseFromParent, /*InsnID*/0,

_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

GIR

GIRGIR

GIR

Page 125: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

/*ADDWri Pattern*/ ADDWri : [( , ( , :$imm))]

set GPR32sp:$Rdadd GPR32sp:$Rn

addsub_shifted_imm32

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

_ComplexRenderer, [...] _EraseFromParent, /*InsnID*/0,

_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

GIR

GIRGIR

GIR

Page 126: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Instruction Select TableGen Support

[SD].td CodeGenDAG Patterns

GlobalISel Emitter [GI].inc

_Try, /*On fail goto*//*Label 478*/ 30417,_CheckNumOperands, /*MI*/0, /*Expected*/3,

_CheckOpcode, /*MI*/0, TargetOpcode::G_ADD, _CheckRegBankForClass, [...]GPR32spRegClassID,

_CheckComplexPattern, /*MI*/0, /*Op*/1, /*Renderer*/0, GICP_gi_addsub_shifted_imm32,

_BuildMI, [...] /*Opcode*/AArch64::ADDWri,

_ComplexRenderer, [...] _EraseFromParent, /*InsnID*/0,

_Done

[...]

[...]

[...]

[...]

GIMGIMGIMGIM

GIM

GIR

GIRGIR

GIR

Page 127: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Present

Page 128: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Present Status

Page 129: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Non-optional library

Present Status

Page 130: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Non-optional library

• Ports in progress:

Present Status

Page 131: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Non-optional library

• Ports in progress:

Present Status

X86 AMDGPU AArch64 ARM Hexagon PowerPC Mips SystemZ WebAssembly AVR NVPTX Sparc

BPF XCore Lanai RISCV MSP430 Nios2 ARC

Page 132: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Non-optional library

• Ports in progress:

Present Status

X86 AMDGPU AArch64 ARM Hexagon PowerPC Mips SystemZ WebAssembly AVR NVPTX Sparc

BPF XCore Lanai RISCV MSP430 Nios2 ARC

Page 133: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Non-optional library

• Ports in progress:

Present Status

X86 AMDGPU AArch64 ARM Hexagon PowerPC Mips SystemZ WebAssembly AVR NVPTX Sparc

BPF XCore Lanai RISCV MSP430 Nios2 ARC

Page 134: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Present Status: AArch64 -O0

Page 135: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Test Suite + SPEC

Present Status: AArch64 -O0

Page 136: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Test Suite + SPEC

Present Status: AArch64 -O0

% Instructions handled without fallback

Page 137: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Test Suite + SPEC

• Clang self-host

Present Status: AArch64 -O0

% Instructions handled without fallback

Page 138: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Test Suite + SPEC

• Clang self-host

Present Status: AArch64 -O0

% Instructions handled without fallback

Page 139: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Test Suite + SPEC

• Clang self-host

• Our internal software

Present Status: AArch64 -O0

% Instructions handled without fallback

Page 140: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Test Suite + SPEC

• Clang self-host

• Our internal software

Present Status: AArch64 -O0

% Instructions handled without fallback

Page 141: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Present Status: Select TableGen

Page 142: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

Present Status: Select TableGen

Page 143: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

Present Status: Select TableGen

% Imported patterns

Page 144: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

Present Status: Select TableGen

Lots of vectors

% Imported patterns

Page 145: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

• ARM

Present Status: Select TableGen

Lots of vectors

% Imported patterns

Page 146: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

• ARM

Present Status: Select TableGen

Lots of vectors

% Imported patterns

Page 147: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

• ARM

• X86

Present Status: Select TableGen

Lots of vectors

% Imported patterns

Page 148: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

• ARM

• X86

Present Status: Select TableGen

Lots of vectors

% Imported patterns

Page 149: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• AArch64

• ARM

• X86

Present Status: Select TableGen

Lots of vectors

Even more vectors% Imported patterns

Page 150: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

PresentPerformance

Page 151: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Code size

Page 152: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Code size

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

Page 153: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Code size

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

Page 154: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Constant placement

%5(_,s64) = G_ADD %2, %6%4(_,s64) = G_MUL %1, %6

%6(_,s64) = G_CONSTANT 10

Page 155: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Constant placement: -regalloc=fast

%9(_,s64) = G_LOAD %fi%5(_,s64) = G_ADD %2, %9

%8(_,s64) = G_LOAD %fi%4(_,s64) = G_MUL %1, %8

%6(_,s64) = G_CONSTANT 10G_STORE %6, %fi Spill

Page 156: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Constant placement: Localizer

%9(_,s64) = G_CONSTANT 10%5(_,s64) = G_ADD %2, %9

%8(_,s64) = G_CONSTANT 10%4(_,s64) = G_MUL %1, %8

Page 157: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Code size: before

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

Page 158: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Code size: with localizer

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

Page 159: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Compile time

Page 160: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Compile time

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

Page 161: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Compile time

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

Page 162: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Compile time

80%

90%

100%

110%

120%

130%

140%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

GlobalISelSelectionDAG

157% 152% 203%

Page 163: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Compile time: per pass

Page 164: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Compile time: per pass

0%

25%

50%

75%

100%

125%

150%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

IRTranslatorRegBankSelectLegalizerLocalizerInstructionSelect

Page 165: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Compile time: per pass

0%

25%

50%

75%

100%

125%

150%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

IRTranslatorRegBankSelectLegalizerLocalizerInstructionSelect

Page 166: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

FastISel

Performance Compile time: per pass

0%

25%

50%

75%

100%

125%

150%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

IRTranslatorRegBankSelectLegalizerLocalizerInstructionSelectSelectionDAG

Page 167: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Compile time: per pass, normalized

0%

20%

40%

60%

80%

100%

kc

SPASS

tramp3

d-v4

cons

umer-

types

et

bulle

t

lenco

d

pairlo

calal

ign

clamsc

an

7zip-

benc

hmark

sqlite

3

IRTranslatorRegBankSelectLegalizerLocalizerInstructionSelect

GlobalISel

Page 168: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Runtime: SPEC2006

Page 169: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Runtime: SPEC2006

100%

125%

150%

175%

200%

470.l

bm46

2.libq

uantu

m43

3.milc

482.s

phinx

346

4.h26

4ref

429.m

cf44

7.dea

lII44

4.nam

d45

6.hmmer

471.o

mnetpp

483.x

alanc

bmk

401.b

zip2

473.a

star

450.s

oplex

453.p

ovray

445.g

obmk

458.s

jeng

403.g

cc40

0.perl

benc

h

Page 170: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Runtime: SPEC2006

100%

125%

150%

175%

200%

470.l

bm46

2.libq

uantu

m43

3.milc

482.s

phinx

346

4.h26

4ref

429.m

cf44

7.dea

lII44

4.nam

d45

6.hmmer

471.o

mnetpp

483.x

alanc

bmk

401.b

zip2

473.a

star

450.s

oplex

453.p

ovray

445.g

obmk

458.s

jeng

403.g

cc40

0.perl

benc

h

FastISel

Page 171: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Performance Runtime: Test Suite

100%

125%

150%

175%

200%

FastISel

Page 172: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future

Page 173: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Beyond -O0

Page 174: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Flesh out the pass pipeline

Future Beyond -O0

Page 175: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Flesh out the pass pipeline

• Kill Localizer

Future Beyond -O0

Page 176: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Flesh out the pass pipeline

• Kill Localizer

• Kill CodeGenPrepare

Future Beyond -O0

Page 177: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Beyond the SelectionDAG GlobalISelEmitter

Page 178: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Emit legality info

Future Beyond the SelectionDAG GlobalISelEmitter

Page 179: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Emit legality info

Future Beyond the SelectionDAG GlobalISelEmitter

def : Pat< (i32 (mul (GPR32:$Rn, GPR32:$Rm))), (...) >;

Page 180: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Emit legality info

Future Beyond the SelectionDAG GlobalISelEmitter

setAction({G_MUL, 0, s32}, Legal)

def : Pat< (i32 (mul (GPR32:$Rn, GPR32:$Rm))), (...) >;

Page 181: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Emit legality info

• Emit register bank mapping

Future Beyond the SelectionDAG GlobalISelEmitter

Page 182: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Emit legality info

• Emit register bank mapping

• Support pure GlobalISel patterns

Future Beyond the SelectionDAG GlobalISelEmitter

Page 183: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Beyond SelectionDAG

Page 184: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Feature parity (remember vectors?)

Future Beyond SelectionDAG

Page 185: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Feature parity (remember vectors?)

• Improved performance

Future Beyond SelectionDAG

Page 186: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Feature parity (remember vectors?)

• Improved performance

• More testing!

Future Beyond SelectionDAG

Page 187: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

Page 188: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

def : Pat< (f32 (fma (fneg (FPR32:$Rn), FPR32:$Rm, FPR32:$Ra)), (FMSUBSrrr FPR32:$Rn, FPR32:$Rm, FPR32:$Ra) >;

Page 189: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

def Mul2ToShl1 : Combine< (mul type0:$src0, 2), (shl type0:$src0, 1), >;

Page 190: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

TableGen Backend

def Mul2ToShl1 : Combine< (mul type0:$src0, 2), (shl type0:$src0, 1), >;

Page 191: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

TableGen Backend

Inst Combine .incdef Mul2ToShl1 : Combine<

(mul type0:$src0, 2), (shl type0:$src0, 1), >;

Page 192: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

TableGen Backend

Inst Combine .inc

GISel Combine .inc

def Mul2ToShl1 : Combine< (mul type0:$src0, 2), (shl type0:$src0, 1), >;

Page 193: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

TableGen Backend

Inst Combine .inc

GISel Combine .inc

def Mul2ToShl1 : Combine< (mul type0:$src0, 2), (shl type0:$src0, 1), >;

Page 194: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Combines: Leveraging Patterns

TableGen Backend

Inst Combine .inc

GISel Combine .inc

def Mul2ToShl1 : Combine< (mul type0:$src0, 2), (shl type0:$src0, 1), >;

Target Config .td Target

Combine .inc

def : RunWhen<Mul2ToShl1, [BeforeLegalized, AfterLegalized]>

def MyPattern : (MyOp(...)); def : RunWhen<MyPattern, [AfterRegBankSelect]>

Page 195: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Future Tools to Help the Transition

Page 196: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Better .mir test format

Future Tools to Help the Transition

Page 197: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Better .mir test format

• Better MachineInstr API

Future Tools to Help the Transition

Page 198: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Better .mir test format

• Better MachineInstr API

• Regression tests generator

Future Tools to Help the Transition

Page 199: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

• Better .mir test format

• Better MachineInstr API

• Regression tests generator

• SDNode to GMIR migrator

Future Tools to Help the Transition

Page 200: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Contributions Welcome!

Page 201: GISel status 2017 final - LLVMllvm.org/devmtg/2017-10/slides/Bougacha-Colombet-GlobalISel.pdf · LLVM DevMtg October 2017 Ahmed Bougacha Quentin Colombet GlobalISel Past, Present,

Questions?