blob: 760904b579a8f4d152e73e446b9c57461ada6fb3 [file] [log] [blame]
Vitaly Buka410a6b22018-06-07 19:17:46 +00001//===-- cxx_loop_proto.proto - Protobuf description of C++ with for loops -===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// This file describes a subset of C++ as a protobuf. It is used to
Emmett Neymanba58c3a2018-08-15 23:05:48 +000012/// more easily find interesting inputs for fuzzing LLVM's vectorizer.
13/// This subset differs from the one defined in cxx_proto.proto by eliminating
14/// while loops and conditionals. The goal is that the C++ code generated will
15/// be more likely to stress the LLVM loop vectorizer. The code generated will
16/// contain either a single loop or two nested loops.
Vitaly Buka410a6b22018-06-07 19:17:46 +000017///
18//===----------------------------------------------------------------------===//
19
Vitaly Buka410a6b22018-06-07 19:17:46 +000020syntax = "proto2";
21
Vitaly Buka410a6b22018-06-07 19:17:46 +000022message Const {
23 required int32 val = 1;
24}
25
Matt Morehouse34167732018-06-11 17:05:45 +000026message VarRef {
27 // Add an enum for each array in function signature
28 enum Arr {
29 ARR_A = 0;
30 ARR_B = 1;
31 ARR_C = 2;
32 };
33 required Arr arr = 1;
34}
35
Vitaly Buka410a6b22018-06-07 19:17:46 +000036message BinaryOp {
37 enum Op {
38 PLUS = 0;
39 MINUS = 1;
40 MUL = 2;
Emmett Neymane5f4a9f2018-06-22 18:05:00 +000041 XOR = 3;
42 AND = 4;
43 OR = 5;
44 EQ = 6;
45 NE = 7;
46 LE = 8;
47 GE = 9;
48 LT = 10;
49 GT = 11;
Vitaly Buka410a6b22018-06-07 19:17:46 +000050 };
51 required Op op = 1;
52 required Rvalue left = 2;
53 required Rvalue right = 3;
54}
55
56message Rvalue {
57 oneof rvalue_oneof {
Matt Morehouse1dc1ff82018-06-08 00:33:35 +000058 Const cons = 1;
59 BinaryOp binop = 2;
Matt Morehouse34167732018-06-11 17:05:45 +000060 VarRef varref = 3;
Vitaly Buka410a6b22018-06-07 19:17:46 +000061 }
62}
63
64message AssignmentStatement {
Matt Morehouse34167732018-06-11 17:05:45 +000065 required VarRef varref = 1;
Vitaly Buka410a6b22018-06-07 19:17:46 +000066 required Rvalue rvalue = 2;
67}
68
Vitaly Buka410a6b22018-06-07 19:17:46 +000069message Statement {
Matt Morehouse34167732018-06-11 17:05:45 +000070 required AssignmentStatement assignment = 1;
Vitaly Buka410a6b22018-06-07 19:17:46 +000071}
72
73message StatementSeq {
74 repeated Statement statements = 1;
75}
76
77message LoopFunction {
Emmett Neymanba58c3a2018-08-15 23:05:48 +000078 optional StatementSeq inner_statements = 1;
79 required StatementSeq outer_statements = 2;
Vitaly Buka410a6b22018-06-07 19:17:46 +000080}
81
82package clang_fuzzer;