blob: 92883a2f6aaa8c24924c6d96562f8ccc4278f75c [file] [log] [blame]
Valentin Clement2fb57d62022-04-03 13:17:211// Test lowering FIR to LLVM IR of fir.select{|_rank|_case}
2
3// RUN: tco %s | FileCheck %s
4
5// CHECK-LABEL: @f
6func @f(%a : i32) -> i32 {
7 %1 = arith.constant 1 : i32
8 %2 = arith.constant 42 : i32
9// CHECK: switch i32 %{{.*}}, label %{{.*}} [
10// CHECK: i32 1, label %{{.*}}
11// CHECK: ]
12 fir.select %a : i32 [1, ^bb2(%1:i32), unit, ^bb3(%2:i32)]
13^bb2(%3 : i32) :
14 return %3 : i32
15^bb3(%4 : i32) :
16 %5 = arith.addi %4, %4 : i32
17 // CHECK: ret i32
18 return %5 : i32
19}
20
21// CHECK-LABEL: @g
22func @g(%a : i32) -> i32 {
23 %1 = arith.constant 1 : i32
24 %2 = arith.constant 42 : i32
25
26// CHECK: switch i32 %{{.*}}, label %{{.*}} [
27// CHECK: i32 1, label %{{.*}}
28// CHECK: i32 -1, label %{{.*}}
29// CHECK: ]
30 fir.select_rank %a : i32 [1, ^bb2(%1:i32), -1, ^bb4, unit, ^bb3(%2:i32)]
31^bb2(%3 : i32) :
32 return %3 : i32
33^bb3(%4 : i32) :
34 %5 = arith.addi %4, %4 : i32
35 return %5 : i32
36^bb4:
37 // CHECK: ret i32
38 return %a : i32
39}
40
41// CHECK-LABEL: @h
42func @h(%a : i32) -> i32 {
43 %1 = arith.constant 1 : i32
44 %2 = arith.constant 42 : i32
45 %b1 = arith.constant 4 : i32
46 %b2 = arith.constant 14 : i32
47 %b3 = arith.constant 82 : i32
48 %b4 = arith.constant 96 : i32
49 // CHECK-DAG: icmp eq i32 %{{.*}}, 1
50 // CHECK-DAG: icmp sle i32 4, %{{.*}}
51 // CHECK-DAG: icmp sle i32 %{{.*}}, 14
52 // CHECK-DAG: icmp sle i32 82, %{{.*}}
53 // CHECK-DAG: icmp sle i32 %{{.*}}, 96
54 fir.select_case %a : i32 [#fir.point, %1, ^bb2(%1:i32), #fir.lower, %b1, ^bb4, #fir.upper, %b2, ^bb6, #fir.interval, %b3, %b4, ^bb5, unit, ^bb3(%2:i32)]
55^bb2(%3 : i32) :
56 return %3 : i32
57^bb3(%4 : i32) :
58 %5 = arith.addi %4, %4 : i32
59 cf.br ^bb2(%5 : i32)
60^bb4:
61 return %a : i32
62^bb5:
63 return %1 : i32
64^bb6:
65 %x = arith.addi %b4, %b3 : i32
66 // CHECK: ret i32
67 return %x : i32
68}