brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 0d559b6 Raw
95 lines · plain
1// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s --enable-var-scope2 3 4llvm.func @tile_trivial_loop(%baseptr: !llvm.ptr, %tc: i32, %ts: i32) -> () {5  %literal_cli = omp.new_cli6  omp.canonical_loop(%literal_cli) %iv : i32 in range(%tc) {7    %ptr = llvm.getelementptr inbounds %baseptr[%iv] : (!llvm.ptr, i32) -> !llvm.ptr, f328    %val = llvm.mlir.constant(42.0 : f32) : f329    llvm.store %val, %ptr : f32, !llvm.ptr10    omp.terminator11  }12  omp.tile <- (%literal_cli) sizes(%ts : i32)13  llvm.return14}15 16 17// CHECK-LABEL: define void @tile_trivial_loop(18// CHECK-SAME:    ptr %[[TMP0:.+]], i32 %[[TMP1:.+]], i32 %[[TMP2:.+]]) {19// CHECK-NEXT:    br label %[[OMP_OMP_LOOP_PREHEADER:.+]]20// CHECK-EMPTY:21// CHECK-NEXT:  [[OMP_OMP_LOOP_PREHEADER]]:22// CHECK-NEXT:    %[[TMP4:.+]] = udiv i32 %[[TMP1:.+]], %[[TMP2:.+]]23// CHECK-NEXT:    %[[TMP5:.+]] = urem i32 %[[TMP1:.+]], %[[TMP2:.+]]24// CHECK-NEXT:    %[[TMP6:.+]] = icmp ne i32 %[[TMP5:.+]], 025// CHECK-NEXT:    %[[TMP7:.+]] = zext i1 %[[TMP6:.+]] to i3226// CHECK-NEXT:    %[[OMP_FLOOR0_TRIPCOUNT:.+]] = add nuw i32 %[[TMP4:.+]], %[[TMP7:.+]]27// CHECK-NEXT:    br label %[[OMP_FLOOR0_PREHEADER:.+]]28// CHECK-EMPTY:29// CHECK-NEXT:  [[OMP_FLOOR0_PREHEADER]]:30// CHECK-NEXT:    br label %[[OMP_FLOOR0_HEADER:.+]]31// CHECK-EMPTY:32// CHECK-NEXT:  [[OMP_FLOOR0_HEADER]]:33// CHECK-NEXT:    %[[OMP_FLOOR0_IV:.+]] = phi i32 [ 0, %[[OMP_FLOOR0_PREHEADER:.+]] ], [ %[[OMP_FLOOR0_NEXT:.+]], %[[OMP_FLOOR0_INC:.+]] ]34// CHECK-NEXT:    br label %[[OMP_FLOOR0_COND:.+]]35// CHECK-EMPTY:36// CHECK-NEXT:  [[OMP_FLOOR0_COND]]:37// CHECK-NEXT:    %[[OMP_FLOOR0_CMP:.+]] = icmp ult i32 %[[OMP_FLOOR0_IV:.+]], %[[OMP_FLOOR0_TRIPCOUNT:.+]]38// CHECK-NEXT:    br i1 %[[OMP_FLOOR0_CMP:.+]], label %[[OMP_FLOOR0_BODY:.+]], label %[[OMP_FLOOR0_EXIT:.+]]39// CHECK-EMPTY:40// CHECK-NEXT:  [[OMP_FLOOR0_BODY]]:41// CHECK-NEXT:    %[[TMP8:.+]] = icmp eq i32 %[[OMP_FLOOR0_IV:.+]], %[[TMP4:.+]]42// CHECK-NEXT:    %[[TMP9:.+]] = select i1 %[[TMP8:.+]], i32 %[[TMP5:.+]], i32 %[[TMP2:.+]]43// CHECK-NEXT:    br label %[[OMP_TILE0_PREHEADER:.+]]44// CHECK-EMPTY:45// CHECK-NEXT:  [[OMP_TILE0_PREHEADER]]:46// CHECK-NEXT:    br label %[[OMP_TILE0_HEADER:.+]]47// CHECK-EMPTY:48// CHECK-NEXT:  [[OMP_TILE0_HEADER]]:49// CHECK-NEXT:    %[[OMP_TILE0_IV:.+]] = phi i32 [ 0, %[[OMP_TILE0_PREHEADER:.+]] ], [ %[[OMP_TILE0_NEXT:.+]], %[[OMP_TILE0_INC:.+]] ]50// CHECK-NEXT:    br label %[[OMP_TILE0_COND:.+]]51// CHECK-EMPTY:52// CHECK-NEXT:  [[OMP_TILE0_COND]]:53// CHECK-NEXT:    %[[OMP_TILE0_CMP:.+]] = icmp ult i32 %[[OMP_TILE0_IV:.+]], %[[TMP9:.+]]54// CHECK-NEXT:    br i1 %[[OMP_TILE0_CMP:.+]], label %[[OMP_TILE0_BODY:.+]], label %[[OMP_TILE0_EXIT:.+]]55// CHECK-EMPTY:56// CHECK-NEXT:  [[OMP_TILE0_BODY]]:57// CHECK-NEXT:    %[[TMP10:.+]] = mul nuw i32 %[[TMP2:.+]], %[[OMP_FLOOR0_IV:.+]]58// CHECK-NEXT:    %[[TMP11:.+]] = add nuw i32 %[[TMP10:.+]], %[[OMP_TILE0_IV:.+]]59// CHECK-NEXT:    br label %[[OMP_OMP_LOOP_BODY:.+]]60// CHECK-EMPTY:61// CHECK-NEXT:  [[OMP_OMP_LOOP_BODY]]:62// CHECK-NEXT:    br label %[[OMP_LOOP_REGION:.+]]63// CHECK-EMPTY:64// CHECK-NEXT:  [[OMP_LOOP_REGION]]:65// CHECK-NEXT:    %[[TMP12:.+]] = getelementptr inbounds float, ptr %[[TMP0:.+]], i32 %[[TMP11:.+]]66// CHECK-NEXT:    store float 4.200000e+01, ptr %[[TMP12:.+]], align 467// CHECK-NEXT:    br label %[[OMP_REGION_CONT:.+]]68// CHECK-EMPTY:69// CHECK-NEXT:  [[OMP_REGION_CONT]]:70// CHECK-NEXT:    br label %[[OMP_TILE0_INC:.+]]71// CHECK-EMPTY:72// CHECK-NEXT:  [[OMP_TILE0_INC]]:73// CHECK-NEXT:    %[[OMP_TILE0_NEXT:.+]] = add nuw i32 %[[OMP_TILE0_IV:.+]], 174// CHECK-NEXT:    br label %[[OMP_TILE0_HEADER:.+]]75// CHECK-EMPTY:76// CHECK-NEXT:  [[OMP_TILE0_EXIT]]:77// CHECK-NEXT:    br label %[[OMP_TILE0_AFTER:.+]]78// CHECK-EMPTY:79// CHECK-NEXT:  [[OMP_TILE0_AFTER]]:80// CHECK-NEXT:    br label %[[OMP_FLOOR0_INC:.+]]81// CHECK-EMPTY:82// CHECK-NEXT:  [[OMP_FLOOR0_INC]]:83// CHECK-NEXT:    %[[OMP_FLOOR0_NEXT:.+]] = add nuw i32 %[[OMP_FLOOR0_IV:.+]], 184// CHECK-NEXT:    br label %[[OMP_FLOOR0_HEADER:.+]]85// CHECK-EMPTY:86// CHECK-NEXT:  [[OMP_FLOOR0_EXIT]]:87// CHECK-NEXT:    br label %[[OMP_FLOOR0_AFTER:.+]]88// CHECK-EMPTY:89// CHECK-NEXT:  [[OMP_FLOOR0_AFTER]]:90// CHECK-NEXT:    br label %[[OMP_OMP_LOOP_AFTER:.+]]91// CHECK-EMPTY:92// CHECK-NEXT:  [[OMP_OMP_LOOP_AFTER]]:93// CHECK-NEXT:    ret void94// CHECK-NEXT:  }95