annotate test/CodeGen/X86/scalar_widen_div.ll @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
2 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.2 | FileCheck %s
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 ; Verify when widening a divide/remainder operation, we only generate a
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 ; divide/rem per element since divide/remainder can trap.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 ; CHECK: vectorDiv
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 define void @vectorDiv (<2 x i32> addrspace(1)* %nsource, <2 x i32> addrspace(1)* %dsource, <2 x i32> addrspace(1)* %qdest) nounwind {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
9 ; CHECK-LABEL: vectorDiv:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
10 ; CHECK: # %bb.0: # %entry
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
11 ; CHECK-NEXT: movq %rdx, %r8
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
12 ; CHECK-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
13 ; CHECK-NEXT: movq %rsi, -{{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
14 ; CHECK-NEXT: movq %rdx, -{{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
15 ; CHECK-NEXT: movslq -{{[0-9]+}}(%rsp), %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
16 ; CHECK-NEXT: pmovsxdq (%rdi,%rcx,8), %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
17 ; CHECK-NEXT: pmovsxdq (%rsi,%rcx,8), %xmm1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
18 ; CHECK-NEXT: pextrq $1, %xmm0, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
19 ; CHECK-NEXT: pextrq $1, %xmm1, %rsi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
20 ; CHECK-NEXT: cqto
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
21 ; CHECK-NEXT: idivq %rsi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
22 ; CHECK-NEXT: movq %rax, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
23 ; CHECK-NEXT: movq %xmm0, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
24 ; CHECK-NEXT: movq %xmm1, %rsi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
25 ; CHECK-NEXT: cqto
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
26 ; CHECK-NEXT: idivq %rsi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
27 ; CHECK-NEXT: movq %rax, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
28 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
29 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
30 ; CHECK-NEXT: movq %xmm0, (%r8,%rcx,8)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
31 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 entry:
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 %nsource.addr = alloca <2 x i32> addrspace(1)*, align 4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 %dsource.addr = alloca <2 x i32> addrspace(1)*, align 4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 %qdest.addr = alloca <2 x i32> addrspace(1)*, align 4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 %index = alloca i32, align 4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 store <2 x i32> addrspace(1)* %nsource, <2 x i32> addrspace(1)** %nsource.addr
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 store <2 x i32> addrspace(1)* %dsource, <2 x i32> addrspace(1)** %dsource.addr
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 store <2 x i32> addrspace(1)* %qdest, <2 x i32> addrspace(1)** %qdest.addr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
40 %tmp = load <2 x i32> addrspace(1)*, <2 x i32> addrspace(1)** %qdest.addr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
41 %tmp1 = load i32, i32* %index
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
42 %arrayidx = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %tmp, i32 %tmp1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
43 %tmp2 = load <2 x i32> addrspace(1)*, <2 x i32> addrspace(1)** %nsource.addr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
44 %tmp3 = load i32, i32* %index
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
45 %arrayidx4 = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %tmp2, i32 %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
46 %tmp5 = load <2 x i32>, <2 x i32> addrspace(1)* %arrayidx4
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
47 %tmp6 = load <2 x i32> addrspace(1)*, <2 x i32> addrspace(1)** %dsource.addr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
48 %tmp7 = load i32, i32* %index
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
49 %arrayidx8 = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %tmp6, i32 %tmp7
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
50 %tmp9 = load <2 x i32>, <2 x i32> addrspace(1)* %arrayidx8
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 %tmp10 = sdiv <2 x i32> %tmp5, %tmp9
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 store <2 x i32> %tmp10, <2 x i32> addrspace(1)* %arrayidx
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 ret void
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 ; CHECK: test_char_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 define <3 x i8> @test_char_div(<3 x i8> %num, <3 x i8> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
58 ; CHECK-LABEL: test_char_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
59 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
60 ; CHECK-NEXT: movl %edi, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
61 ; CHECK-NEXT: cbtw
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
62 ; CHECK-NEXT: idivb %cl
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
63 ; CHECK-NEXT: movl %eax, %edi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
64 ; CHECK-NEXT: movl %esi, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
65 ; CHECK-NEXT: cbtw
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
66 ; CHECK-NEXT: idivb %r8b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
67 ; CHECK-NEXT: movl %eax, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
68 ; CHECK-NEXT: movl %edx, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
69 ; CHECK-NEXT: cbtw
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
70 ; CHECK-NEXT: idivb %r9b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
71 ; CHECK-NEXT: movl %eax, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
72 ; CHECK-NEXT: movl %edi, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
73 ; CHECK-NEXT: movl %esi, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
74 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 %div.r = sdiv <3 x i8> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 ret <3 x i8> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 ; CHECK: test_uchar_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 define <3 x i8> @test_uchar_div(<3 x i8> %num, <3 x i8> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
81 ; CHECK-LABEL: test_uchar_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
82 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
83 ; CHECK-NEXT: movzbl %dil, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
84 ; CHECK-NEXT: # kill: def $eax killed $eax def $ax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
85 ; CHECK-NEXT: divb %cl
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
86 ; CHECK-NEXT: movl %eax, %edi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
87 ; CHECK-NEXT: movzbl %sil, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
88 ; CHECK-NEXT: # kill: def $eax killed $eax def $ax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
89 ; CHECK-NEXT: divb %r8b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
90 ; CHECK-NEXT: movl %eax, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
91 ; CHECK-NEXT: movzbl %dl, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
92 ; CHECK-NEXT: # kill: def $eax killed $eax def $ax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
93 ; CHECK-NEXT: divb %r9b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
94 ; CHECK-NEXT: movl %eax, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
95 ; CHECK-NEXT: movl %edi, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
96 ; CHECK-NEXT: movl %esi, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
97 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 %div.r = udiv <3 x i8> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 ret <3 x i8> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 ; CHECK: test_short_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 define <5 x i16> @test_short_div(<5 x i16> %num, <5 x i16> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
104 ; CHECK-LABEL: test_short_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
105 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
106 ; CHECK-NEXT: pextrw $4, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
107 ; CHECK-NEXT: pextrw $4, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
108 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
109 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
110 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
111 ; CHECK-NEXT: movl %eax, %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
112 ; CHECK-NEXT: pextrw $3, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
113 ; CHECK-NEXT: pextrw $3, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
114 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
115 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
116 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
117 ; CHECK-NEXT: movl %eax, %r9d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
118 ; CHECK-NEXT: pextrw $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
119 ; CHECK-NEXT: pextrw $2, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
120 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
121 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
122 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
123 ; CHECK-NEXT: movl %eax, %edi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
124 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
125 ; CHECK-NEXT: movd %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
126 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
127 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
128 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
129 ; CHECK-NEXT: movl %eax, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
130 ; CHECK-NEXT: pextrw $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
131 ; CHECK-NEXT: pextrw $1, %xmm1, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
132 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
133 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
134 ; CHECK-NEXT: idivw %si
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
135 ; CHECK-NEXT: # kill: def $ax killed $ax def $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
136 ; CHECK-NEXT: movd %ecx, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
137 ; CHECK-NEXT: pinsrw $1, %eax, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
138 ; CHECK-NEXT: pinsrw $2, %edi, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
139 ; CHECK-NEXT: pinsrw $3, %r9d, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
140 ; CHECK-NEXT: pinsrw $4, %r8d, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
141 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 %div.r = sdiv <5 x i16> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 ret <5 x i16> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 ; CHECK: test_ushort_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 define <4 x i16> @test_ushort_div(<4 x i16> %num, <4 x i16> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
148 ; CHECK-LABEL: test_ushort_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
149 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
150 ; CHECK-NEXT: pxor %xmm2, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
151 ; CHECK-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
152 ; CHECK-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
153 ; CHECK-NEXT: pextrd $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
154 ; CHECK-NEXT: pextrd $1, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
155 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
156 ; CHECK-NEXT: divl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
157 ; CHECK-NEXT: movl %eax, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
158 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
159 ; CHECK-NEXT: movd %xmm1, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
160 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
161 ; CHECK-NEXT: divl %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
162 ; CHECK-NEXT: movd %eax, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
163 ; CHECK-NEXT: pinsrd $1, %ecx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
164 ; CHECK-NEXT: pextrd $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
165 ; CHECK-NEXT: pextrd $2, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
166 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
167 ; CHECK-NEXT: divl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
168 ; CHECK-NEXT: pinsrd $2, %eax, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
169 ; CHECK-NEXT: pextrd $3, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
170 ; CHECK-NEXT: pextrd $3, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
171 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
172 ; CHECK-NEXT: divl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
173 ; CHECK-NEXT: pinsrd $3, %eax, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
174 ; CHECK-NEXT: movdqa %xmm2, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
175 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 %div.r = udiv <4 x i16> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 ret <4 x i16> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 ; CHECK: test_uint_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 define <3 x i32> @test_uint_div(<3 x i32> %num, <3 x i32> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
182 ; CHECK-LABEL: test_uint_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
183 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
184 ; CHECK-NEXT: pextrd $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
185 ; CHECK-NEXT: pextrd $2, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
186 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
187 ; CHECK-NEXT: divl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
188 ; CHECK-NEXT: movl %eax, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
189 ; CHECK-NEXT: pextrd $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
190 ; CHECK-NEXT: pextrd $1, %xmm1, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
191 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
192 ; CHECK-NEXT: divl %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
193 ; CHECK-NEXT: movl %eax, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
194 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
195 ; CHECK-NEXT: movd %xmm1, %edi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
196 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
197 ; CHECK-NEXT: divl %edi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
198 ; CHECK-NEXT: movd %eax, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
199 ; CHECK-NEXT: pinsrd $1, %esi, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
200 ; CHECK-NEXT: pinsrd $2, %ecx, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
201 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 %div.r = udiv <3 x i32> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 ret <3 x i32> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 ; CHECK: test_long_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 define <3 x i64> @test_long_div(<3 x i64> %num, <3 x i64> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
208 ; CHECK-LABEL: test_long_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
209 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
210 ; CHECK-NEXT: movq %rdx, %r10
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
211 ; CHECK-NEXT: movq %rdi, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
212 ; CHECK-NEXT: cqto
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
213 ; CHECK-NEXT: idivq %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
214 ; CHECK-NEXT: movq %rax, %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
215 ; CHECK-NEXT: movq %rsi, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
216 ; CHECK-NEXT: cqto
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
217 ; CHECK-NEXT: idivq %r8
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
218 ; CHECK-NEXT: movq %rax, %rsi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
219 ; CHECK-NEXT: movq %r10, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
220 ; CHECK-NEXT: cqto
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
221 ; CHECK-NEXT: idivq %r9
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
222 ; CHECK-NEXT: movq %rax, %rdi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
223 ; CHECK-NEXT: movq %rcx, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
224 ; CHECK-NEXT: movq %rsi, %rdx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
225 ; CHECK-NEXT: movq %rdi, %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
226 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 %div.r = sdiv <3 x i64> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 ret <3 x i64> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 ; CHECK: test_ulong_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 define <3 x i64> @test_ulong_div(<3 x i64> %num, <3 x i64> %div) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
233 ; CHECK-LABEL: test_ulong_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
234 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
235 ; CHECK-NEXT: movq %rdx, %r10
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
236 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
237 ; CHECK-NEXT: movq %rdi, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
238 ; CHECK-NEXT: divq %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
239 ; CHECK-NEXT: movq %rax, %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
240 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
241 ; CHECK-NEXT: movq %rsi, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
242 ; CHECK-NEXT: divq %r8
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
243 ; CHECK-NEXT: movq %rax, %rsi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
244 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
245 ; CHECK-NEXT: movq %r10, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
246 ; CHECK-NEXT: divq %r9
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
247 ; CHECK-NEXT: movq %rax, %rdi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
248 ; CHECK-NEXT: movq %rcx, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
249 ; CHECK-NEXT: movq %rsi, %rdx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
250 ; CHECK-NEXT: movq %rdi, %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
251 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 %div.r = udiv <3 x i64> %num, %div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 ret <3 x i64> %div.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 ; CHECK: test_char_rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 define <4 x i8> @test_char_rem(<4 x i8> %num, <4 x i8> %rem) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
258 ; CHECK-LABEL: test_char_rem:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
259 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
260 ; CHECK-NEXT: pslld $24, %xmm1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
261 ; CHECK-NEXT: psrad $24, %xmm1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
262 ; CHECK-NEXT: pslld $24, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
263 ; CHECK-NEXT: psrad $24, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
264 ; CHECK-NEXT: pextrd $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
265 ; CHECK-NEXT: pextrd $1, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
266 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
267 ; CHECK-NEXT: idivl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
268 ; CHECK-NEXT: movl %edx, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
269 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
270 ; CHECK-NEXT: movd %xmm1, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
271 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
272 ; CHECK-NEXT: idivl %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
273 ; CHECK-NEXT: movd %edx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
274 ; CHECK-NEXT: pinsrd $1, %ecx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
275 ; CHECK-NEXT: pextrd $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
276 ; CHECK-NEXT: pextrd $2, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
277 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
278 ; CHECK-NEXT: idivl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
279 ; CHECK-NEXT: pinsrd $2, %edx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
280 ; CHECK-NEXT: pextrd $3, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
281 ; CHECK-NEXT: pextrd $3, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
282 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
283 ; CHECK-NEXT: idivl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
284 ; CHECK-NEXT: pinsrd $3, %edx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
285 ; CHECK-NEXT: movdqa %xmm2, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
286 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 %rem.r = srem <4 x i8> %num, %rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 ret <4 x i8> %rem.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 ; CHECK: test_short_rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 define <5 x i16> @test_short_rem(<5 x i16> %num, <5 x i16> %rem) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
293 ; CHECK-LABEL: test_short_rem:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
294 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
295 ; CHECK-NEXT: pextrw $4, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
296 ; CHECK-NEXT: pextrw $4, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
297 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
298 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
299 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
300 ; CHECK-NEXT: movl %edx, %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
301 ; CHECK-NEXT: pextrw $3, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
302 ; CHECK-NEXT: pextrw $3, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
303 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
304 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
305 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
306 ; CHECK-NEXT: movl %edx, %r9d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
307 ; CHECK-NEXT: pextrw $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
308 ; CHECK-NEXT: pextrw $2, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
309 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
310 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
311 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
312 ; CHECK-NEXT: movl %edx, %edi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
313 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
314 ; CHECK-NEXT: movd %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
315 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
316 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
317 ; CHECK-NEXT: idivw %cx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
318 ; CHECK-NEXT: movl %edx, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
319 ; CHECK-NEXT: pextrw $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
320 ; CHECK-NEXT: pextrw $1, %xmm1, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
321 ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
322 ; CHECK-NEXT: cwtd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
323 ; CHECK-NEXT: idivw %si
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
324 ; CHECK-NEXT: # kill: def $dx killed $dx def $edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
325 ; CHECK-NEXT: movd %ecx, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
326 ; CHECK-NEXT: pinsrw $1, %edx, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
327 ; CHECK-NEXT: pinsrw $2, %edi, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
328 ; CHECK-NEXT: pinsrw $3, %r9d, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
329 ; CHECK-NEXT: pinsrw $4, %r8d, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
330 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 %rem.r = srem <5 x i16> %num, %rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 ret <5 x i16> %rem.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 ; CHECK: test_uint_rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 define <4 x i32> @test_uint_rem(<4 x i32> %num, <4 x i32> %rem) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
337 ; CHECK-LABEL: test_uint_rem:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
338 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
339 ; CHECK-NEXT: pextrd $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
340 ; CHECK-NEXT: pextrd $1, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
341 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
342 ; CHECK-NEXT: idivl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
343 ; CHECK-NEXT: movl %edx, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
344 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
345 ; CHECK-NEXT: movd %xmm1, %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
346 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
347 ; CHECK-NEXT: idivl %esi
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
348 ; CHECK-NEXT: movd %edx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
349 ; CHECK-NEXT: pinsrd $1, %ecx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
350 ; CHECK-NEXT: pextrd $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
351 ; CHECK-NEXT: pextrd $2, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
352 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
353 ; CHECK-NEXT: idivl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
354 ; CHECK-NEXT: pinsrd $2, %edx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
355 ; CHECK-NEXT: pextrd $3, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
356 ; CHECK-NEXT: pextrd $3, %xmm1, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
357 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
358 ; CHECK-NEXT: idivl %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
359 ; CHECK-NEXT: pinsrd $3, %edx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
360 ; CHECK-NEXT: movdqa %xmm2, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
361 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 %rem.r = srem <4 x i32> %num, %rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 ret <4 x i32> %rem.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
366
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 ; CHECK: test_ulong_rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 define <5 x i64> @test_ulong_rem(<5 x i64> %num, <5 x i64> %rem) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
369 ; CHECK-LABEL: test_ulong_rem:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
370 ; CHECK: # %bb.0:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
371 ; CHECK-NEXT: movq %rdx, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
372 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
373 ; CHECK-NEXT: divq {{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
374 ; CHECK-NEXT: movq %rdx, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
375 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
376 ; CHECK-NEXT: movq %rsi, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
377 ; CHECK-NEXT: divq {{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
378 ; CHECK-NEXT: movq %rdx, %xmm1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
379 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
380 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
381 ; CHECK-NEXT: movq %r8, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
382 ; CHECK-NEXT: divq {{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
383 ; CHECK-NEXT: movq %rdx, %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
384 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
385 ; CHECK-NEXT: movq %rcx, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
386 ; CHECK-NEXT: divq {{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
387 ; CHECK-NEXT: movq %rdx, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
388 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
389 ; CHECK-NEXT: xorl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
390 ; CHECK-NEXT: movq %r9, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
391 ; CHECK-NEXT: divq {{[0-9]+}}(%rsp)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
392 ; CHECK-NEXT: movq %rdx, 32(%rdi)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
393 ; CHECK-NEXT: movdqa %xmm2, 16(%rdi)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
394 ; CHECK-NEXT: movdqa %xmm1, (%rdi)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
395 ; CHECK-NEXT: movq %rdi, %rax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
396 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 %rem.r = urem <5 x i64> %num, %rem
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 ret <5 x i64> %rem.r
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
400
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 ; CHECK: test_int_div
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 define void @test_int_div(<3 x i32>* %dest, <3 x i32>* %old, i32 %n) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
403 ; CHECK-LABEL: test_int_div:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
404 ; CHECK: # %bb.0: # %entry
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
405 ; CHECK-NEXT: movl %edx, %r9d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
406 ; CHECK-NEXT: testl %edx, %edx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
407 ; CHECK-NEXT: jle .LBB12_3
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
408 ; CHECK-NEXT: # %bb.1: # %bb.nph
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
409 ; CHECK-NEXT: xorl %ecx, %ecx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
410 ; CHECK-NEXT: .p2align 4, 0x90
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
411 ; CHECK-NEXT: .LBB12_2: # %for.body
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
412 ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
413 ; CHECK-NEXT: movdqa (%rdi,%rcx), %xmm0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
414 ; CHECK-NEXT: movdqa (%rsi,%rcx), %xmm1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
415 ; CHECK-NEXT: pextrd $1, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
416 ; CHECK-NEXT: pextrd $1, %xmm1, %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
417 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
418 ; CHECK-NEXT: idivl %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
419 ; CHECK-NEXT: movl %eax, %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
420 ; CHECK-NEXT: movd %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
421 ; CHECK-NEXT: movd %xmm1, %r10d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
422 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
423 ; CHECK-NEXT: idivl %r10d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
424 ; CHECK-NEXT: movd %eax, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
425 ; CHECK-NEXT: pinsrd $1, %r8d, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
426 ; CHECK-NEXT: pextrd $2, %xmm0, %eax
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
427 ; CHECK-NEXT: pextrd $2, %xmm1, %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
428 ; CHECK-NEXT: cltd
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
429 ; CHECK-NEXT: idivl %r8d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
430 ; CHECK-NEXT: pinsrd $2, %eax, %xmm2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
431 ; CHECK-NEXT: movl %eax, 8(%rdi,%rcx)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
432 ; CHECK-NEXT: movq %xmm2, (%rdi,%rcx)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
433 ; CHECK-NEXT: addq $16, %rcx
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
434 ; CHECK-NEXT: decl %r9d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
435 ; CHECK-NEXT: jne .LBB12_2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
436 ; CHECK-NEXT: .LBB12_3: # %for.end
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
437 ; CHECK-NEXT: retq
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 entry:
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 %cmp13 = icmp sgt i32 %n, 0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 br i1 %cmp13, label %bb.nph, label %for.end
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
442 bb.nph:
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 br label %for.body
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 for.body:
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
446 %i.014 = phi i32 [ 0, %bb.nph ], [ %inc, %for.body ]
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
447 %arrayidx11 = getelementptr <3 x i32>, <3 x i32>* %dest, i32 %i.014
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
448 %tmp4 = load <3 x i32>, <3 x i32>* %arrayidx11 ; <<3 x i32>> [#uses=1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
449 %arrayidx7 = getelementptr inbounds <3 x i32>, <3 x i32>* %old, i32 %i.014
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
450 %tmp8 = load <3 x i32>, <3 x i32>* %arrayidx7 ; <<3 x i32>> [#uses=1]
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 %div = sdiv <3 x i32> %tmp4, %tmp8
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 store <3 x i32> %div, <3 x i32>* %arrayidx11
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 %inc = add nsw i32 %i.014, 1
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
454 %exitcond = icmp eq i32 %inc, %n
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 br i1 %exitcond, label %for.end, label %for.body
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
456
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 for.end: ; preds = %for.body, %entry
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 ret void
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 }