Check that negative constants are printed properly in emitc (#7028)
diff --git a/iree/compiler/Dialect/VM/Target/C/test/constant_ops.mlir b/iree/compiler/Dialect/VM/Target/C/test/constant_ops.mlir index 341ef9c..8d5ee0c 100644 --- a/iree/compiler/Dialect/VM/Target/C/test/constant_ops.mlir +++ b/iree/compiler/Dialect/VM/Target/C/test/constant_ops.mlir
@@ -1,13 +1,13 @@ -// RUN: iree-translate -iree-vm-ir-to-c-module -iree-vm-c-module-optimize=false %s | IreeFileCheck %s +// RUN: iree-translate -split-input-file -iree-vm-ir-to-c-module -iree-vm-c-module-optimize=false %s | IreeFileCheck %s -vm.module @constant_ops { +vm.module @rodata_ops { // Check the generated arrays - // CHECK: iree_alignas(16) static const uint8_t constant_ops_buffer_1[] = {1, 2, 3}; - // CHECK-NEXT: iree_alignas(16) static const uint8_t constant_ops_buffer_2[] = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0}; + // CHECK: iree_alignas(16) static const uint8_t rodata_ops_buffer_1[] = {1, 2, 3}; + // CHECK-NEXT: iree_alignas(16) static const uint8_t rodata_ops_buffer_2[] = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0}; // Check the generated state struct - // CHECK-LABEL: struct constant_ops_state_t { + // CHECK-LABEL: struct rodata_ops_state_t { // CHECK-NEXT: iree_allocator_t allocator; // CHECK-NEXT: uint8_t rwdata[1]; // CHECK-NEXT: iree_vm_ref_t refs[1]; @@ -21,22 +21,35 @@ vm.rodata public @buffer_2 dense<[1, 2, 3]> : tensor<3xi32> // check state initialization inside the alloc_state function - // CHECK-LABEL: static iree_status_t constant_ops_alloc_state( + // CHECK-LABEL: static iree_status_t rodata_ops_alloc_state( // CHECK: [[STATE:[^ ]*]] = NULL; - // CHECK: [[VOID_PTR_1:[^ ]*]] = EMITC_CAST(constant_ops_buffer_1, void*); - // CHECK-NEXT: [[SIZE_1:[^ ]*]] = sizeof(constant_ops_buffer_1); + // CHECK: [[VOID_PTR_1:[^ ]*]] = EMITC_CAST(rodata_ops_buffer_1, void*); + // CHECK-NEXT: [[SIZE_1:[^ ]*]] = sizeof(rodata_ops_buffer_1); // CHECK-NEXT: [[BYTE_SPAN_1:[^ ]*]] = iree_make_byte_span([[VOID_PTR_1]], [[SIZE_1]]); // CHECK-NEXT: [[ALLOCATOR_1:[^ ]*]] = iree_allocator_null(); // CHECK-NEXT: [[BUFFERS_1:[^ ]*]] = EMITC_STRUCT_PTR_MEMBER([[STATE]], rodata_buffers); // CHECK-NEXT: [[BUFFER_1:[^ ]*]] = EMITC_ARRAY_ELEMENT_ADDRESS([[BUFFERS_1]], 0); // CHECK-NEXT: iree_vm_buffer_initialize(IREE_VM_BUFFER_ACCESS_ORIGIN_MODULE, [[BYTE_SPAN_1]], [[ALLOCATOR_1]], [[BUFFER_1]]); - // CHECK: [[VOID_PTR_2:[^ ]*]] = EMITC_CAST(constant_ops_buffer_2, void*); - // CHECK-NEXT: [[SIZE_2:[^ ]*]] = sizeof(constant_ops_buffer_2); + // CHECK: [[VOID_PTR_2:[^ ]*]] = EMITC_CAST(rodata_ops_buffer_2, void*); + // CHECK-NEXT: [[SIZE_2:[^ ]*]] = sizeof(rodata_ops_buffer_2); // CHECK-NEXT: [[BYTE_SPAN_2:[^ ]*]] = iree_make_byte_span([[VOID_PTR_2]], [[SIZE_2]]); // CHECK-NEXT: [[ALLOCATOR_2:[^ ]*]] = iree_allocator_null(); // CHECK-NEXT: [[BUFFERS_2:[^ ]*]] = EMITC_STRUCT_PTR_MEMBER([[STATE]], rodata_buffers); // CHECK-NEXT: [[BUFFER_2:[^ ]*]] = EMITC_ARRAY_ELEMENT_ADDRESS([[BUFFERS_2]], 1); // CHECK-NEXT: iree_vm_buffer_initialize(IREE_VM_BUFFER_ACCESS_ORIGIN_MODULE, [[BYTE_SPAN_2]], [[ALLOCATOR_2]], [[BUFFER_2]]); } + +// ----- + +vm.module @constant_ops { + // CHECK-LABEL: constant_ops_neg_constant + vm.func @neg_constant() -> i32 { + // CHECK: int32_t [[CONST:[^ ]*]]; + // CHECK-NOT: [[CONST]] = 4294967292; + // CHECK: [[CONST]] = -4; + %c-4_i32 = vm.const.i32 -4 : i32 + vm.return %c-4_i32 : i32 + } +}