| { |
| "cells": [ |
| { |
| "cell_type": "markdown", |
| "id": "c45bc113", |
| "metadata": {}, |
| "source": [ |
| "# LLVM TableGen Kernel" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "483313fc", |
| "metadata": {}, |
| "source": [ |
| "This notebook is running `llvm-tblgen`." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 1, |
| "id": "e238dd42", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "------------- Classes -----------------\n", |
| "class Foo {\n", |
| "}\n", |
| "------------- Defs -----------------\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%reset\n", |
| "// This is some tablegen\n", |
| "class Foo {}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "27f5aa83", |
| "metadata": {}, |
| "source": [ |
| "Errors printed to stderr are shown." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 2, |
| "id": "e8b10293", |
| "metadata": { |
| "scrolled": true |
| }, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "<stdin>:1:1: error: Unexpected token at top level\n", |
| "This is not tablegen.\n", |
| "^\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%reset\n", |
| "This is not tablegen." |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "83907141", |
| "metadata": {}, |
| "source": [ |
| "Add some classes to get some output." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 3, |
| "id": "4ca8a9cb", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "------------- Classes -----------------\n", |
| "class Stuff {\n", |
| "}\n", |
| "------------- Defs -----------------\n", |
| "def thing {\t// Stuff\n", |
| "}\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%reset\n", |
| "class Stuff {}\n", |
| "def thing : Stuff {}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "3f29d1a0", |
| "metadata": {}, |
| "source": [ |
| "By default cells are connected. Meaning that we cache the code and magic directives from the previously run cells.\n", |
| "\n", |
| "This means that the next cell still sees the `Stuff` class." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 4, |
| "id": "3a204c70", |
| "metadata": { |
| "scrolled": true |
| }, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "------------- Classes -----------------\n", |
| "class Stuff {\n", |
| "}\n", |
| "------------- Defs -----------------\n", |
| "def other_thing {\t// Stuff\n", |
| "}\n", |
| "def thing {\t// Stuff\n", |
| "}\n" |
| ] |
| } |
| ], |
| "source": [ |
| "def other_thing : Stuff {}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "473b0a1c", |
| "metadata": {}, |
| "source": [ |
| "You can use the magic `%reset` to clear this cache and start fresh." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 5, |
| "id": "1f674a03", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "<stdin>:1:19: error: Couldn't find class 'Stuff'\n", |
| "def other_thing : Stuff {}\n", |
| " ^\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%reset\n", |
| "def other_thing : Stuff {}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "f6d4613b", |
| "metadata": {}, |
| "source": [ |
| "There is a \"magic\" directive `%args` that you can use to send command line arguments to `llvm-tblgen`.\n", |
| "\n", |
| "For example, here we have some code that shows a warning." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 6, |
| "id": "2586893b", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "<stdin>:1:25: warning: unused template argument: Thing:B\n", |
| "class Thing <int A, int B> {\n", |
| " ^\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%reset\n", |
| "class Thing <int A, int B> {\n", |
| " int num = A;\n", |
| "}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "41be44e7", |
| "metadata": {}, |
| "source": [ |
| "We can pass an argument to ignore that warning." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 7, |
| "id": "ae078bc4", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "------------- Classes -----------------\n", |
| "class Thing<int Thing:A = ?, int Thing:B = ?> {\n", |
| " int num = Thing:A;\n", |
| "}\n", |
| "------------- Defs -----------------\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%args --no-warn-on-unused-template-args" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "316b9543", |
| "metadata": {}, |
| "source": [ |
| "If you have a run of cells without a `%reset`, the most recent `%args` is used." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 8, |
| "id": "9634170c", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "------------- Classes -----------------\n", |
| "class Thing<int Thing:A = ?, int Thing:B = ?> {\n", |
| " int num = Thing:A;\n", |
| "}\n", |
| "------------- Defs -----------------\n" |
| ] |
| } |
| ], |
| "source": [ |
| "// This passes --no-warn-on-unused-template-args" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 9, |
| "id": "fa15b542", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "<stdin>:1:25: warning: unused template argument: Thing:B\n", |
| "class Thing <int A, int B> {\n", |
| " ^\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%args\n", |
| "// Now we're not passing the argument so the warning comes back." |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "id": "e112f1d4", |
| "metadata": {}, |
| "source": [ |
| "If there are many `%args` in a cell, the last one is used." |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 10, |
| "id": "2ac46c7a", |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "<stdin>:1:18: warning: unused template argument: Thing:A\n", |
| "class Thing <int A, int B> {}\n", |
| " ^\n", |
| "<stdin>:1:25: warning: unused template argument: Thing:B\n", |
| "class Thing <int A, int B> {}\n", |
| " ^\n" |
| ] |
| } |
| ], |
| "source": [ |
| "%reset\n", |
| "%args --no-warn-on-unused-template-args\n", |
| "%args\n", |
| "class Thing <int A, int B> {}" |
| ] |
| } |
| ], |
| "metadata": { |
| "kernelspec": { |
| "display_name": "LLVM TableGen", |
| "language": "tablegen", |
| "name": "tablegen" |
| }, |
| "language_info": { |
| "file_extension": ".td", |
| "mimetype": "text/x-tablegen", |
| "name": "tablegen", |
| "pygments_lexer": "text" |
| } |
| }, |
| "nbformat": 4, |
| "nbformat_minor": 5 |
| } |