95 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s3 4// Tests for the true and false literals.5 6defvar otherwise = true;7defvar do_it = true;8 9// CHECK: def rec110// CHECK: bit flag1 = 1;11// CHECK: bit flag2 = 0;12// CHECK: int true_int = 1;13 14def rec1 {15 bit flag1 = true;16 bit flag2 = false;17 int true_int = true;18}19 20// CHECK: def rec2_true21 22if true then23 def rec2_true {}24else25 def rec2_bad {}26 27// CHECK: def rec3_false28 29if false then30 def rec3_bad {}31else32 def rec3_false {}33 34// CHECK: def rec435// CHECK: int value = 52;36 37def rec4 {38 int value = !add(10, !if(!and(do_it, true), 42, 0));39}40 41// CHECK: def rec542// CHECK: string name = "snork";43 44def rec5 {45 string name = !cond(false: "foo",46 !not(do_it): "bar",47 otherwise: "snork");48}49 50// CHECK: def rec651// CHECK: bit xorFF = 0;52// CHECK: bit xorFT = 1;53// CHECK: bit xorTF = 1;54// CHECK: bit xorTT = 0;55 56def rec6 {57 bit xorFF = !xor(false, false);58 bit xorFT = !xor(false, true);59 bit xorTF = !xor(true, false);60 bit xorTT = !xor(true, true);61}62 63// CHECK: def rec764// CHECK: bits<3> flags = { 1, 0, 1 };65 66def rec7 {67 bits<3> flags = { true, false, true };68}69 70// `!and` and `!or` should be short-circuited such that any of the `!head` or71// `!tail` on empty list below will never be evaluated.72// CHECK: def rec873// CHECK: bit v = 0;74// CHECK: int v2 = -1;75// CHECK: list<int> newSeq = [];76// CHECK: list<int> newSeq2 = [];77 78class Foo <list<int> seq = []> {79 bit v = !and(false, !head(seq));80 int v2 = !or(-1, !head(seq));81 82 bit unresolved = !ne(!find(NAME, "BAR"), -1);83 list<int> newSeq = !if(!and(false, unresolved), !tail(seq), seq);84 list<int> newSeq2 = !if(!or(-1, unresolved), seq, !tail(seq));85}86 87def rec8 : Foo<>;88 89#ifdef ERROR190// ERROR1: Record name '1' is not a string91 92def true {}93#endif94 95