comparison test/CodeGen/WebAssembly/comparisons_i64.ll @ 100:7d135dc70f03

LLVM 3.9
author Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
date Tue, 26 Jan 2016 22:53:40 +0900
parents afa8332a0e37
children 1172e4bd9c6f
comparison
equal deleted inserted replaced
96:6418606d0ead 100:7d135dc70f03
1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s 1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
2 2
3 ; Test that basic 64-bit integer comparison operations assemble as expected. 3 ; Test that basic 64-bit integer comparison operations assemble as expected.
4 4
5 target datalayout = "e-p:32:32-i64:64-n32:64-S128" 5 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
6 target triple = "wasm32-unknown-unknown" 6 target triple = "wasm32-unknown-unknown"
7 7
8 ; CHECK-LABEL: eq_i64: 8 ; CHECK-LABEL: eq_i64:
9 ; CHECK-NEXT: .param i64{{$}} 9 ; CHECK-NEXT: .param i64, i64{{$}}
10 ; CHECK-NEXT: .param i64{{$}}
11 ; CHECK-NEXT: .result i32{{$}} 10 ; CHECK-NEXT: .result i32{{$}}
12 ; CHECK-NEXT: @1{{$}} 11 ; CHECK-NEXT: i64.eq $push[[NUM:[0-9]+]]=, $0, $1{{$}}
13 ; CHECK-NEXT: set_local @2, pop{{$}} 12 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
14 ; CHECK-NEXT: @0{{$}}
15 ; CHECK-NEXT: set_local @3, pop{{$}}
16 ; CHECK-NEXT: eq @3, @2{{$}}
17 ; CHECK-NEXT: set_local @4, pop{{$}}
18 ; CHECK-NEXT: return @4{{$}}
19 define i32 @eq_i64(i64 %x, i64 %y) { 13 define i32 @eq_i64(i64 %x, i64 %y) {
20 %a = icmp eq i64 %x, %y 14 %a = icmp eq i64 %x, %y
21 %b = zext i1 %a to i32 15 %b = zext i1 %a to i32
22 ret i32 %b 16 ret i32 %b
23 } 17 }
24 18
25 ; CHECK-LABEL: ne_i64: 19 ; CHECK-LABEL: ne_i64:
26 ; CHECK: ne @3, @2{{$}} 20 ; CHECK: i64.ne $push[[NUM:[0-9]+]]=, $0, $1{{$}}
27 ; CHECK-NEXT: set_local @4, pop{{$}} 21 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
28 define i32 @ne_i64(i64 %x, i64 %y) { 22 define i32 @ne_i64(i64 %x, i64 %y) {
29 %a = icmp ne i64 %x, %y 23 %a = icmp ne i64 %x, %y
30 %b = zext i1 %a to i32 24 %b = zext i1 %a to i32
31 ret i32 %b 25 ret i32 %b
32 } 26 }
33 27
34 ; CHECK-LABEL: slt_i64: 28 ; CHECK-LABEL: slt_i64:
35 ; CHECK: slt @3, @2{{$}} 29 ; CHECK: i64.lt_s $push[[NUM:[0-9]+]]=, $0, $1{{$}}
36 ; CHECK-NEXT: set_local @4, pop{{$}} 30 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
37 define i32 @slt_i64(i64 %x, i64 %y) { 31 define i32 @slt_i64(i64 %x, i64 %y) {
38 %a = icmp slt i64 %x, %y 32 %a = icmp slt i64 %x, %y
39 %b = zext i1 %a to i32 33 %b = zext i1 %a to i32
40 ret i32 %b 34 ret i32 %b
41 } 35 }
42 36
43 ; CHECK-LABEL: sle_i64: 37 ; CHECK-LABEL: sle_i64:
44 ; CHECK: sle @3, @2{{$}} 38 ; CHECK: i64.le_s $push[[NUM:[0-9]+]]=, $0, $1{{$}}
45 ; CHECK-NEXT: set_local @4, pop{{$}} 39 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
46 define i32 @sle_i64(i64 %x, i64 %y) { 40 define i32 @sle_i64(i64 %x, i64 %y) {
47 %a = icmp sle i64 %x, %y 41 %a = icmp sle i64 %x, %y
48 %b = zext i1 %a to i32 42 %b = zext i1 %a to i32
49 ret i32 %b 43 ret i32 %b
50 } 44 }
51 45
52 ; CHECK-LABEL: ult_i64: 46 ; CHECK-LABEL: ult_i64:
53 ; CHECK: ult @3, @2{{$}} 47 ; CHECK: i64.lt_u $push[[NUM:[0-9]+]]=, $0, $1{{$}}
54 ; CHECK-NEXT: set_local @4, pop{{$}} 48 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
55 define i32 @ult_i64(i64 %x, i64 %y) { 49 define i32 @ult_i64(i64 %x, i64 %y) {
56 %a = icmp ult i64 %x, %y 50 %a = icmp ult i64 %x, %y
57 %b = zext i1 %a to i32 51 %b = zext i1 %a to i32
58 ret i32 %b 52 ret i32 %b
59 } 53 }
60 54
61 ; CHECK-LABEL: ule_i64: 55 ; CHECK-LABEL: ule_i64:
62 ; CHECK: ule @3, @2{{$}} 56 ; CHECK: i64.le_u $push[[NUM:[0-9]+]]=, $0, $1{{$}}
63 ; CHECK-NEXT: set_local @4, pop{{$}} 57 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
64 define i32 @ule_i64(i64 %x, i64 %y) { 58 define i32 @ule_i64(i64 %x, i64 %y) {
65 %a = icmp ule i64 %x, %y 59 %a = icmp ule i64 %x, %y
66 %b = zext i1 %a to i32 60 %b = zext i1 %a to i32
67 ret i32 %b 61 ret i32 %b
68 } 62 }
69 63
70 ; CHECK-LABEL: sgt_i64: 64 ; CHECK-LABEL: sgt_i64:
71 ; CHECK: sgt @3, @2{{$}} 65 ; CHECK: i64.gt_s $push[[NUM:[0-9]+]]=, $0, $1{{$}}
72 ; CHECK-NEXT: set_local @4, pop{{$}} 66 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
73 define i32 @sgt_i64(i64 %x, i64 %y) { 67 define i32 @sgt_i64(i64 %x, i64 %y) {
74 %a = icmp sgt i64 %x, %y 68 %a = icmp sgt i64 %x, %y
75 %b = zext i1 %a to i32 69 %b = zext i1 %a to i32
76 ret i32 %b 70 ret i32 %b
77 } 71 }
78 72
79 ; CHECK-LABEL: sge_i64: 73 ; CHECK-LABEL: sge_i64:
80 ; CHECK: sge @3, @2{{$}} 74 ; CHECK: i64.ge_s $push[[NUM:[0-9]+]]=, $0, $1{{$}}
81 ; CHECK-NEXT: set_local @4, pop{{$}} 75 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
82 define i32 @sge_i64(i64 %x, i64 %y) { 76 define i32 @sge_i64(i64 %x, i64 %y) {
83 %a = icmp sge i64 %x, %y 77 %a = icmp sge i64 %x, %y
84 %b = zext i1 %a to i32 78 %b = zext i1 %a to i32
85 ret i32 %b 79 ret i32 %b
86 } 80 }
87 81
88 ; CHECK-LABEL: ugt_i64: 82 ; CHECK-LABEL: ugt_i64:
89 ; CHECK: ugt @3, @2{{$}} 83 ; CHECK: i64.gt_u $push[[NUM:[0-9]+]]=, $0, $1{{$}}
90 ; CHECK-NEXT: set_local @4, pop{{$}} 84 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
91 define i32 @ugt_i64(i64 %x, i64 %y) { 85 define i32 @ugt_i64(i64 %x, i64 %y) {
92 %a = icmp ugt i64 %x, %y 86 %a = icmp ugt i64 %x, %y
93 %b = zext i1 %a to i32 87 %b = zext i1 %a to i32
94 ret i32 %b 88 ret i32 %b
95 } 89 }
96 90
97 ; CHECK-LABEL: uge_i64: 91 ; CHECK-LABEL: uge_i64:
98 ; CHECK: uge @3, @2{{$}} 92 ; CHECK: i64.ge_u $push[[NUM:[0-9]+]]=, $0, $1{{$}}
99 ; CHECK-NEXT: set_local @4, pop{{$}} 93 ; CHECK-NEXT: return $pop[[NUM]]{{$}}
100 define i32 @uge_i64(i64 %x, i64 %y) { 94 define i32 @uge_i64(i64 %x, i64 %y) {
101 %a = icmp uge i64 %x, %y 95 %a = icmp uge i64 %x, %y
102 %b = zext i1 %a to i32 96 %b = zext i1 %a to i32
103 ret i32 %b 97 ret i32 %b
104 } 98 }