comparison test/CodeGen/WebAssembly/comparisons_i32.ll @ 121:803732b1fca8

LLVM 5.0
author kono
date Fri, 27 Oct 2017 17:07:41 +0900
parents 1172e4bd9c6f
children
comparison
equal deleted inserted replaced
120:1172e4bd9c6f 121:803732b1fca8
2 ; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -fast-isel -fast-isel-abort=1 | FileCheck %s 2 ; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -fast-isel -fast-isel-abort=1 | FileCheck %s
3 3
4 ; Test that basic 32-bit integer comparison operations assemble as expected. 4 ; Test that basic 32-bit integer comparison operations assemble as expected.
5 5
6 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 6 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
7 target triple = "wasm32-unknown-unknown" 7 target triple = "wasm32-unknown-unknown-wasm"
8 8
9 ; CHECK-LABEL: eq_i32: 9 ; CHECK-LABEL: eq_i32:
10 ; CHECK-NEXT: .param i32, i32{{$}} 10 ; CHECK-NEXT: .param i32, i32{{$}}
11 ; CHECK-NEXT: .result i32{{$}} 11 ; CHECK-NEXT: .result i32{{$}}
12 ; CHECK-NEXT: i32.eq $push[[NUM:[0-9]+]]=, $0, $1{{$}} 12 ; CHECK-NEXT: get_local $push[[L0:[0-9]+]]=, 0{{$}}
13 ; CHECK-NEXT: get_local $push[[L1:[0-9]+]]=, 1{{$}}
14 ; CHECK-NEXT: i32.eq $push[[NUM:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
13 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 15 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
14 define i32 @eq_i32(i32 %x, i32 %y) { 16 define i32 @eq_i32(i32 %x, i32 %y) {
15 %a = icmp eq i32 %x, %y 17 %a = icmp eq i32 %x, %y
16 %b = zext i1 %a to i32 18 %b = zext i1 %a to i32
17 ret i32 %b 19 ret i32 %b
18 } 20 }
19 21
20 ; CHECK-LABEL: ne_i32: 22 ; CHECK-LABEL: ne_i32:
21 ; CHECK: i32.ne $push[[NUM:[0-9]+]]=, $0, $1{{$}} 23 ; CHECK: i32.ne $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
22 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 24 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
23 define i32 @ne_i32(i32 %x, i32 %y) { 25 define i32 @ne_i32(i32 %x, i32 %y) {
24 %a = icmp ne i32 %x, %y 26 %a = icmp ne i32 %x, %y
25 %b = zext i1 %a to i32 27 %b = zext i1 %a to i32
26 ret i32 %b 28 ret i32 %b
27 } 29 }
28 30
29 ; CHECK-LABEL: slt_i32: 31 ; CHECK-LABEL: slt_i32:
30 ; CHECK: i32.lt_s $push[[NUM:[0-9]+]]=, $0, $1{{$}} 32 ; CHECK: i32.lt_s $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
31 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 33 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
32 define i32 @slt_i32(i32 %x, i32 %y) { 34 define i32 @slt_i32(i32 %x, i32 %y) {
33 %a = icmp slt i32 %x, %y 35 %a = icmp slt i32 %x, %y
34 %b = zext i1 %a to i32 36 %b = zext i1 %a to i32
35 ret i32 %b 37 ret i32 %b
36 } 38 }
37 39
38 ; CHECK-LABEL: sle_i32: 40 ; CHECK-LABEL: sle_i32:
39 ; CHECK: i32.le_s $push[[NUM:[0-9]+]]=, $0, $1{{$}} 41 ; CHECK: i32.le_s $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
40 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 42 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
41 define i32 @sle_i32(i32 %x, i32 %y) { 43 define i32 @sle_i32(i32 %x, i32 %y) {
42 %a = icmp sle i32 %x, %y 44 %a = icmp sle i32 %x, %y
43 %b = zext i1 %a to i32 45 %b = zext i1 %a to i32
44 ret i32 %b 46 ret i32 %b
45 } 47 }
46 48
47 ; CHECK-LABEL: ult_i32: 49 ; CHECK-LABEL: ult_i32:
48 ; CHECK: i32.lt_u $push[[NUM:[0-9]+]]=, $0, $1{{$}} 50 ; CHECK: i32.lt_u $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
49 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 51 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
50 define i32 @ult_i32(i32 %x, i32 %y) { 52 define i32 @ult_i32(i32 %x, i32 %y) {
51 %a = icmp ult i32 %x, %y 53 %a = icmp ult i32 %x, %y
52 %b = zext i1 %a to i32 54 %b = zext i1 %a to i32
53 ret i32 %b 55 ret i32 %b
54 } 56 }
55 57
56 ; CHECK-LABEL: ule_i32: 58 ; CHECK-LABEL: ule_i32:
57 ; CHECK: i32.le_u $push[[NUM:[0-9]+]]=, $0, $1{{$}} 59 ; CHECK: i32.le_u $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
58 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 60 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
59 define i32 @ule_i32(i32 %x, i32 %y) { 61 define i32 @ule_i32(i32 %x, i32 %y) {
60 %a = icmp ule i32 %x, %y 62 %a = icmp ule i32 %x, %y
61 %b = zext i1 %a to i32 63 %b = zext i1 %a to i32
62 ret i32 %b 64 ret i32 %b
63 } 65 }
64 66
65 ; CHECK-LABEL: sgt_i32: 67 ; CHECK-LABEL: sgt_i32:
66 ; CHECK: i32.gt_s $push[[NUM:[0-9]+]]=, $0, $1{{$}} 68 ; CHECK: i32.gt_s $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
67 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 69 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
68 define i32 @sgt_i32(i32 %x, i32 %y) { 70 define i32 @sgt_i32(i32 %x, i32 %y) {
69 %a = icmp sgt i32 %x, %y 71 %a = icmp sgt i32 %x, %y
70 %b = zext i1 %a to i32 72 %b = zext i1 %a to i32
71 ret i32 %b 73 ret i32 %b
72 } 74 }
73 75
74 ; CHECK-LABEL: sge_i32: 76 ; CHECK-LABEL: sge_i32:
75 ; CHECK: i32.ge_s $push[[NUM:[0-9]+]]=, $0, $1{{$}} 77 ; CHECK: i32.ge_s $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
76 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 78 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
77 define i32 @sge_i32(i32 %x, i32 %y) { 79 define i32 @sge_i32(i32 %x, i32 %y) {
78 %a = icmp sge i32 %x, %y 80 %a = icmp sge i32 %x, %y
79 %b = zext i1 %a to i32 81 %b = zext i1 %a to i32
80 ret i32 %b 82 ret i32 %b
81 } 83 }
82 84
83 ; CHECK-LABEL: ugt_i32: 85 ; CHECK-LABEL: ugt_i32:
84 ; CHECK: i32.gt_u $push[[NUM:[0-9]+]]=, $0, $1{{$}} 86 ; CHECK: i32.gt_u $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
85 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 87 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
86 define i32 @ugt_i32(i32 %x, i32 %y) { 88 define i32 @ugt_i32(i32 %x, i32 %y) {
87 %a = icmp ugt i32 %x, %y 89 %a = icmp ugt i32 %x, %y
88 %b = zext i1 %a to i32 90 %b = zext i1 %a to i32
89 ret i32 %b 91 ret i32 %b
90 } 92 }
91 93
92 ; CHECK-LABEL: uge_i32: 94 ; CHECK-LABEL: uge_i32:
93 ; CHECK: i32.ge_u $push[[NUM:[0-9]+]]=, $0, $1{{$}} 95 ; CHECK: i32.ge_u $push[[NUM:[0-9]+]]=, $pop{{[0-9]+}}, $pop{{[0-9]+}}{{$}}
94 ; CHECK-NEXT: return $pop[[NUM]]{{$}} 96 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
95 define i32 @uge_i32(i32 %x, i32 %y) { 97 define i32 @uge_i32(i32 %x, i32 %y) {
96 %a = icmp uge i32 %x, %y 98 %a = icmp uge i32 %x, %y
97 %b = zext i1 %a to i32 99 %b = zext i1 %a to i32
98 ret i32 %b 100 ret i32 %b