153 lines · plain
1// RUN: fir-opt --split-input-file --simplify-fir-operations %s | FileCheck --check-prefixes=ALL,NOOPT %s2// RUN: fir-opt --split-input-file --simplify-fir-operations=prefer-inline-implementation=true %s | FileCheck --check-prefixes=ALL,OPT %s3 4func.func @test_none_innermost(%arg0: !fir.box<none>) -> i1 {5 %0 = fir.is_contiguous_box %arg0 innermost : (!fir.box<none>) -> i16 return %0 : i17}8// ALL-LABEL: func.func @test_none_innermost(9// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i1 {10// ALL: %[[VAL_1:.*]] = arith.constant 1 : i3211// ALL: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_0]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i112// ALL: return %[[VAL_2]] : i113 14// -----15 16func.func @test_none_whole(%arg0: !fir.box<none>) -> i1 {17 %0 = fir.is_contiguous_box %arg0 whole : (!fir.box<none>) -> i118 return %0 : i119}20// ALL-LABEL: func.func @test_none_whole(21// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i1 {22// ALL: %[[VAL_1:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_0]]) : (!fir.box<none>) -> i123// ALL: return %[[VAL_1]] : i124// ALL: }25 26// -----27 28func.func @test_array_innermost(%arg0: !fir.box<!fir.array<?xf32>>) -> i1 {29 %0 = fir.is_contiguous_box %arg0 innermost : (!fir.box<!fir.array<?xf32>>) -> i130 return %0 : i131}32// ALL-LABEL: func.func @test_array_innermost(33// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xf32>>) -> i1 {34// NOOPT: %[[VAL_1:.*]] = arith.constant 1 : i3235// NOOPT: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none>36// NOOPT: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i137// NOOPT: return %[[VAL_3]] : i138// OPT: %[[VAL_1:.*]] = arith.constant 0 : index39// OPT: %[[VAL_2:.*]] = fir.box_elesize %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> index40// OPT: %[[VAL_3:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_1]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index)41// OPT: %[[VAL_4:.*]] = arith.cmpi eq, %[[VAL_2]], %[[VAL_3]]#2 : index42// OPT: %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_3]]#1, %[[VAL_1]] : index43// OPT: %[[VAL_6:.*]] = arith.ori %[[VAL_4]], %[[VAL_5]] : i144// OPT: return %[[VAL_6]] : i145 46// -----47 48func.func @test_array_whole(%arg0: !fir.box<!fir.array<?xf32>>) -> i1 {49 %0 = fir.is_contiguous_box %arg0 whole : (!fir.box<!fir.array<?xf32>>) -> i150 return %0 : i151}52// ALL-LABEL: func.func @test_array_whole(53// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xf32>>) -> i1 {54// NOOPT: %[[VAL_1:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none>55// NOOPT: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_1]]) : (!fir.box<none>) -> i156// NOOPT: return %[[VAL_2]] : i157// OPT: %[[VAL_1:.*]] = arith.constant 0 : index58// OPT: %[[VAL_2:.*]] = fir.box_elesize %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> index59// OPT: %[[VAL_3:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_1]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index)60// OPT: %[[VAL_4:.*]] = arith.cmpi eq, %[[VAL_2]], %[[VAL_3]]#2 : index61// OPT: %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_3]]#1, %[[VAL_1]] : index62// OPT: %[[VAL_6:.*]] = arith.ori %[[VAL_4]], %[[VAL_5]] : i163// OPT: return %[[VAL_6]] : i164 65// -----66 67func.func @test_assumed_rank_innermost(%arg0: !fir.box<!fir.array<*:f32>>) -> i1 {68 %0 = fir.is_contiguous_box %arg0 innermost : (!fir.box<!fir.array<*:f32>>) -> i169 return %0 : i170}71// ALL-LABEL: func.func @test_assumed_rank_innermost(72// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> i1 {73// ALL: %[[VAL_1:.*]] = arith.constant 1 : i3274// ALL: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none>75// ALL: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i176// ALL: return %[[VAL_3]] : i177 78// -----79 80func.func @test_assumed_rank_whole(%arg0: !fir.box<!fir.array<*:f32>>) -> i1 {81 %0 = fir.is_contiguous_box %arg0 whole : (!fir.box<!fir.array<*:f32>>) -> i182 return %0 : i183}84// ALL-LABEL: func.func @test_assumed_rank_whole(85// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> i1 {86// ALL: %[[VAL_1:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none>87// ALL: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_1]]) : (!fir.box<none>) -> i188// ALL: return %[[VAL_2]] : i189// ALL: }90 91// -----92 93func.func @test_scalar_upoly(%arg0: !fir.class<none>) -> i1 {94 %0 = fir.is_contiguous_box %arg0 innermost : (!fir.class<none>) -> i195 return %0 : i196}97// ALL-LABEL: func.func @test_scalar_upoly(98// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.class<none>) -> i1 {99// ALL: %[[VAL_1:.*]] = arith.constant 1 : i32100// ALL: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.class<none>) -> !fir.box<none>101// ALL: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1102// ALL: return %[[VAL_3]] : i1103 104// -----105 106func.func @test_none(%arg0: !fir.box<none>) -> i16 {107 %0 = fir.box_total_elements %arg0 : (!fir.box<none>) -> i16108 return %0 : i16109}110// ALL-LABEL: func.func @test_none(111// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i16 {112// ALL: %[[VAL_3:.*]] = arith.constant {{.*}} : i32113// ALL: %[[VAL_1:.*]] = fir.address_of(@{{.*}}) : !fir.ref<!fir.char<1,{{.*}}>>114// ALL: %[[VAL_4:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8>115// ALL: %[[VAL_5:.*]] = fir.call @_FortranASize(%[[VAL_0]], %[[VAL_4]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64116// ALL: %[[VAL_6:.*]] = fir.convert %[[VAL_5]] : (i64) -> i16117// ALL: return %[[VAL_6]] : i16118// ALL: }119 120// -----121 122func.func @test_array(%arg0: !fir.box<!fir.array<?x?xf32>>) -> i32 {123 %0 = fir.box_total_elements %arg0 : (!fir.box<!fir.array<?x?xf32>>) -> i32124 return %0 : i32125}126// ALL-LABEL: func.func @test_array(127// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?x?xf32>>) -> i32 {128// ALL: %[[VAL_3:.*]] = arith.constant {{.*}} : i32129// ALL: %[[VAL_1:.*]] = fir.address_of({{.*}}) : !fir.ref<!fir.char<1,{{.*}}>>130// ALL: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>131// ALL: %[[VAL_5:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8>132// ALL: %[[VAL_6:.*]] = fir.call @_FortranASize(%[[VAL_4]], %[[VAL_5]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64133// ALL: %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i64) -> i32134// ALL: return %[[VAL_7]] : i32135// ALL: }136 137// -----138 139func.func @test_assumed_rank(%arg0: !fir.box<!fir.array<*:f32>>) -> index {140 %0 = fir.box_total_elements %arg0 : (!fir.box<!fir.array<*:f32>>) -> index141 return %0 : index142}143// ALL-LABEL: func.func @test_assumed_rank(144// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> index {145// ALL: %[[VAL_3:.*]] = arith.constant {{.*}} : i32146// ALL: %[[VAL_1:.*]] = fir.address_of({{.*}}) : !fir.ref<!fir.char<1,{{.*}}>>147// ALL: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none>148// ALL: %[[VAL_5:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8>149// ALL: %[[VAL_6:.*]] = fir.call @_FortranASize(%[[VAL_4]], %[[VAL_5]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64150// ALL: %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i64) -> index151// ALL: return %[[VAL_7]] : index152// ALL: }153