xref: /llvm-project/mlir/test/Bytecode/bytecode-lazy-loading.mlir (revision 4af01bf95628f8ec674277fd1610eac172598cea)
13128b310SMehdi Amini// RUN: mlir-opt --pass-pipeline="builtin.module(test-lazy-loading)" %s -o %t | FileCheck %s
23128b310SMehdi Amini// RUN: mlir-opt --pass-pipeline="builtin.module(test-lazy-loading{bytecode-version=1})" %s -o %t | FileCheck %s --check-prefix=OLD-BYTECODE
33128b310SMehdi Amini
43128b310SMehdi Amini
53128b310SMehdi Aminifunc.func @op_with_passthrough_region_args() {
63128b310SMehdi Amini  %0 = arith.constant 10 : index
75ab65895SRiver Riddle
85ab65895SRiver Riddle  // Ensure we can handle nested non-isolated/non-lazy regions.
95ab65895SRiver Riddle  "test.one_region_op"() ({
105ab65895SRiver Riddle    "test.consumer"(%0) : (index) -> ()
115ab65895SRiver Riddle  }) : () -> ()
125ab65895SRiver Riddle
133128b310SMehdi Amini  test.isolated_region %0 {
143128b310SMehdi Amini    "test.consumer"(%0) : (index) -> ()
153128b310SMehdi Amini  }
163128b310SMehdi Amini  %result:2 = "test.op"() : () -> (index, index)
173128b310SMehdi Amini  test.isolated_region %result#1 {
183128b310SMehdi Amini    "test.consumer"(%result#1) : (index) -> ()
193128b310SMehdi Amini  }
205ab65895SRiver Riddle
215ab65895SRiver Riddle  test.isolated_regions {
225ab65895SRiver Riddle    "test.unknown_op"() : () -> ()
235ab65895SRiver Riddle  }, {
245ab65895SRiver Riddle    "test.unknown_op"() : () -> ()
255ab65895SRiver Riddle  }
26*4af01bf9SRiver Riddle
27*4af01bf9SRiver Riddle  // Ensure operations that aren't tagged as IsolatedFromAbove can
28*4af01bf9SRiver Riddle  // still be lazy loaded if they don't have references to values
29*4af01bf9SRiver Riddle  // defined above.
30*4af01bf9SRiver Riddle  "test.one_region_op"() ({
31*4af01bf9SRiver Riddle    "test.unknown_op"() : () -> ()
32*4af01bf9SRiver Riddle  }) : () -> ()
33*4af01bf9SRiver Riddle
34*4af01bf9SRiver Riddle  // Similar test as above, but check that if one region has a reference
35*4af01bf9SRiver Riddle  // to a value defined above, we don't lazy load the operation.
36*4af01bf9SRiver Riddle  "test.two_region_op"() ({
37*4af01bf9SRiver Riddle    "test.unknown_op"() : () -> ()
38*4af01bf9SRiver Riddle  }, {
39*4af01bf9SRiver Riddle    "test.consumer"(%0) : (index) -> ()
40*4af01bf9SRiver Riddle  }) : () -> ()
413128b310SMehdi Amini  return
423128b310SMehdi Amini}
433128b310SMehdi Amini
443128b310SMehdi Amini// Before version 2, we can't support lazy loading.
453128b310SMehdi Amini// OLD-BYTECODE-NOT: Has 1 ops to materialize
463128b310SMehdi Amini// OLD-BYTECODE-NOT: Materializing
473128b310SMehdi Amini// OLD-BYTECODE: Has 0 ops to materialize
483128b310SMehdi Amini
493128b310SMehdi Amini
503128b310SMehdi Amini// CHECK: Has 1 ops to materialize
513128b310SMehdi Amini
523128b310SMehdi Amini// CHECK: Before Materializing...
533128b310SMehdi Amini// CHECK: "builtin.module"() ({
543128b310SMehdi Amini// CHECK-NOT: func
553128b310SMehdi Amini// CHECK: Materializing...
563128b310SMehdi Amini// CHECK: "builtin.module"() ({
573128b310SMehdi Amini// CHECK: "func.func"() <{function_type = () -> (), sym_name = "op_with_passthrough_region_args"}> ({
583128b310SMehdi Amini// CHECK-NOT: arith
593128b310SMehdi Amini// CHECK: Has 1 ops to materialize
603128b310SMehdi Amini
613128b310SMehdi Amini// CHECK: Before Materializing...
623128b310SMehdi Amini// CHECK: "func.func"() <{function_type = () -> (), sym_name = "op_with_passthrough_region_args"}> ({
633128b310SMehdi Amini// CHECK-NOT: arith
643128b310SMehdi Amini// CHECK: Materializing...
653128b310SMehdi Amini// CHECK: "func.func"() <{function_type = () -> (), sym_name = "op_with_passthrough_region_args"}> ({
663128b310SMehdi Amini// CHECK: arith
675ab65895SRiver Riddle// CHECK: one_region_op
685ab65895SRiver Riddle// CHECK: test.consumer
693128b310SMehdi Amini// CHECK: isolated_region
703128b310SMehdi Amini// CHECK-NOT: test.consumer
71*4af01bf9SRiver Riddle// CHECK: test.one_region_op
72*4af01bf9SRiver Riddle// CHECK-NOT: test.op
73*4af01bf9SRiver Riddle// CHECK: test.two_region_op
74*4af01bf9SRiver Riddle// CHECK: test.unknown_op
75*4af01bf9SRiver Riddle// CHECK: test.consumer
76*4af01bf9SRiver Riddle// CHECK: Has 4 ops to materialize
773128b310SMehdi Amini
783128b310SMehdi Amini// CHECK: Before Materializing...
793128b310SMehdi Amini// CHECK: test.isolated_region
803128b310SMehdi Amini// CHECK-NOT:  test.consumer
813128b310SMehdi Amini// CHECK: Materializing...
823128b310SMehdi Amini// CHECK: test.isolated_region
833128b310SMehdi Amini// CHECK: ^bb0(%arg0: index):
843128b310SMehdi Amini// CHECK:  test.consumer
85*4af01bf9SRiver Riddle// CHECK: Has 3 ops to materialize
863128b310SMehdi Amini
873128b310SMehdi Amini// CHECK: Before Materializing...
883128b310SMehdi Amini// CHECK: test.isolated_region
893128b310SMehdi Amini// CHECK-NOT: test.consumer
903128b310SMehdi Amini// CHECK: Materializing...
913128b310SMehdi Amini// CHECK: test.isolated_region
923128b310SMehdi Amini// CHECK: test.consumer
93*4af01bf9SRiver Riddle// CHECK: Has 2 ops to materialize
945ab65895SRiver Riddle
955ab65895SRiver Riddle// CHECK: Before Materializing...
965ab65895SRiver Riddle// CHECK: test.isolated_regions
975ab65895SRiver Riddle// CHECK-NOT: test.unknown_op
985ab65895SRiver Riddle// CHECK: Materializing...
995ab65895SRiver Riddle// CHECK: test.isolated_regions
1005ab65895SRiver Riddle// CHECK: test.unknown_op
1015ab65895SRiver Riddle// CHECK: test.unknown_op
102*4af01bf9SRiver Riddle// CHECK: Has 1 ops to materialize
103*4af01bf9SRiver Riddle
104*4af01bf9SRiver Riddle// CHECK: Before Materializing...
105*4af01bf9SRiver Riddle// CHECK: test.one_region_op
106*4af01bf9SRiver Riddle// CHECK-NOT: test.unknown_op
107*4af01bf9SRiver Riddle// CHECK: Materializing...
108*4af01bf9SRiver Riddle// CHECK: test.one_region_op
109*4af01bf9SRiver Riddle// CHECK: test.unknown_op
1103128b310SMehdi Amini// CHECK: Has 0 ops to materialize
111