xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/X86/mmx-intrinsics.ll (revision 4a426079d60a664419dfc98855a798c4103fbbf0)
1354a04c8SVitaly Buka; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2354a04c8SVitaly Buka; RUN: opt %s -S -passes=msan 2>&1 | FileCheck %s
3354a04c8SVitaly Buka
4354a04c8SVitaly Bukatarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
5354a04c8SVitaly Bukatarget triple = "x86_64-unknown-linux-gnu"
678341f36SVitaly Buka
7b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64>, <1 x i64>) nounwind readnone
878341f36SVitaly Buka
9354a04c8SVitaly Bukadefine i64 @test1(<1 x i64> %a, <1 x i64> %b) #0 {
10354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test1(
11354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1:[0-9]+]] {
12354a04c8SVitaly Buka; CHECK-NEXT:  entry:
13354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
14354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
15354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
16354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
17354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
18354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
19354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
20dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
21dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
22dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i16> [[TMP12]] to <1 x i64>
23dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
248ef171eeSThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = call <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64> [[TMP16]], <1 x i64> [[TMP8]])
25dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5:[0-9]+]]
26dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
27dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <4 x i16>
28354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
29dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
30354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
31354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
32354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
33354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
3478341f36SVitaly Buka;
3578341f36SVitaly Bukaentry:
3678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
3778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
38b7e4fba6SJames Y Knight  %2 = bitcast <4 x i16> %1 to <1 x i64>
39b7e4fba6SJames Y Knight  %3 = bitcast <4 x i16> %0 to <1 x i64>
40b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64> %2, <1 x i64> %3) nounwind readnone
41b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <4 x i16>
4278341f36SVitaly Buka  %6 = bitcast <4 x i16> %5 to <1 x i64>
4378341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
4478341f36SVitaly Buka  ret i64 %7
4578341f36SVitaly Buka}
4678341f36SVitaly Buka
47b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pcmpgt.d(<1 x i64>, <1 x i64>) nounwind readnone
4878341f36SVitaly Buka
49354a04c8SVitaly Bukadefine i64 @test88(<1 x i64> %a, <1 x i64> %b) #0 {
50354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test88(
51354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
52354a04c8SVitaly Buka; CHECK-NEXT:  entry:
53354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
54354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
55354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
56354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
57354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
58354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
59354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
60dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
61dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
62dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
63dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
64dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
65dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pcmpgt.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2:[0-9]+]]
66dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
67dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
68354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
69dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
70354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
71354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
72354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
73354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
7478341f36SVitaly Buka;
7578341f36SVitaly Bukaentry:
7678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
7778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
78b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
79b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
80b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pcmpgt.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
81b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
8278341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
8378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
8478341f36SVitaly Buka  ret i64 %5
8578341f36SVitaly Buka}
8678341f36SVitaly Buka
87b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pcmpgt.w(<1 x i64>, <1 x i64>) nounwind readnone
8878341f36SVitaly Buka
89354a04c8SVitaly Bukadefine i64 @test87(<1 x i64> %a, <1 x i64> %b) #0 {
90354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test87(
91354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
92354a04c8SVitaly Buka; CHECK-NEXT:  entry:
93354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
94354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
95354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
96354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
97354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
98354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
99354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
100dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
101dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
102dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
103dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
104dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
105dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pcmpgt.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
106dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
107dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
108354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
109dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
110354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
111354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
112354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
113354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
11478341f36SVitaly Buka;
11578341f36SVitaly Bukaentry:
11678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
11778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
118b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
119b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
120b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pcmpgt.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
121b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
12278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
12378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
12478341f36SVitaly Buka  ret i64 %5
12578341f36SVitaly Buka}
12678341f36SVitaly Buka
127b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pcmpgt.b(<1 x i64>, <1 x i64>) nounwind readnone
12878341f36SVitaly Buka
129354a04c8SVitaly Bukadefine i64 @test86(<1 x i64> %a, <1 x i64> %b) #0 {
130354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test86(
131354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
132354a04c8SVitaly Buka; CHECK-NEXT:  entry:
133354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
134354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
135354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
136354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
137354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
138354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
139354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
140dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
141dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
142dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
143dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
144dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
145dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pcmpgt.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
146dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
147dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
148354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
149dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
150354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
151354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
152354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
153354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
15478341f36SVitaly Buka;
15578341f36SVitaly Bukaentry:
15678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
15778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
158b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
159b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
160b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pcmpgt.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
161b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
16278341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
16378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
16478341f36SVitaly Buka  ret i64 %5
16578341f36SVitaly Buka}
16678341f36SVitaly Buka
167b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pcmpeq.d(<1 x i64>, <1 x i64>) nounwind readnone
16878341f36SVitaly Buka
169354a04c8SVitaly Bukadefine i64 @test85(<1 x i64> %a, <1 x i64> %b) #0 {
170354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test85(
171354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
172354a04c8SVitaly Buka; CHECK-NEXT:  entry:
173354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
174354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
175354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
176354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
177354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
178354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
179354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
180dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
181dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
182dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
183dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
184dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
185dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pcmpeq.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
186dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
187dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
188354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
189dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
190354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
191354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
192354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
193354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
19478341f36SVitaly Buka;
19578341f36SVitaly Bukaentry:
19678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
19778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
198b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
199b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
200b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pcmpeq.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
201b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
20278341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
20378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
20478341f36SVitaly Buka  ret i64 %5
20578341f36SVitaly Buka}
20678341f36SVitaly Buka
207b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pcmpeq.w(<1 x i64>, <1 x i64>) nounwind readnone
20878341f36SVitaly Buka
209354a04c8SVitaly Bukadefine i64 @test84(<1 x i64> %a, <1 x i64> %b) #0 {
210354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test84(
211354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
212354a04c8SVitaly Buka; CHECK-NEXT:  entry:
213354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
214354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
215354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
216354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
217354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
218354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
219354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
220dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
221dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
222dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
223dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
224dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
225dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pcmpeq.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
226dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
227dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
228354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
229dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
230354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
231354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
232354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
233354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
23478341f36SVitaly Buka;
23578341f36SVitaly Bukaentry:
23678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
23778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
238b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
239b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
240b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pcmpeq.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
241b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
24278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
24378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
24478341f36SVitaly Buka  ret i64 %5
24578341f36SVitaly Buka}
24678341f36SVitaly Buka
247b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pcmpeq.b(<1 x i64>, <1 x i64>) nounwind readnone
24878341f36SVitaly Buka
249354a04c8SVitaly Bukadefine i64 @test83(<1 x i64> %a, <1 x i64> %b) #0 {
250354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test83(
251354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
252354a04c8SVitaly Buka; CHECK-NEXT:  entry:
253354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
254354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
255354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
256354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
257354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
258354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
259354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
260dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
261dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
262dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
263dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
264dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
265dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pcmpeq.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
266dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
267dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
268354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
269dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
270354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
271354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
272354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
273354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
27478341f36SVitaly Buka;
27578341f36SVitaly Bukaentry:
27678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
27778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
278b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
279b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
280b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pcmpeq.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
281b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
28278341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
28378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
28478341f36SVitaly Buka  ret i64 %5
28578341f36SVitaly Buka}
28678341f36SVitaly Buka
287b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.punpckldq(<1 x i64>, <1 x i64>) nounwind readnone
28878341f36SVitaly Buka
289354a04c8SVitaly Bukadefine i64 @test82(<1 x i64> %a, <1 x i64> %b) #0 {
290354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test82(
291354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
292354a04c8SVitaly Buka; CHECK-NEXT:  entry:
293354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
294354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
295354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
296354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
297354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
298354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
299354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
300dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
301dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
302dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
303dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
304dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
305dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.punpckldq(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
306dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
307dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
308354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
309dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
310354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
311354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
312354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
313354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
31478341f36SVitaly Buka;
31578341f36SVitaly Bukaentry:
31678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
31778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
318b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
319b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
320b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.punpckldq(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
321b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
32278341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
32378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
32478341f36SVitaly Buka  ret i64 %5
32578341f36SVitaly Buka}
32678341f36SVitaly Buka
327b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.punpcklwd(<1 x i64>, <1 x i64>) nounwind readnone
32878341f36SVitaly Buka
329354a04c8SVitaly Bukadefine i64 @test81(<1 x i64> %a, <1 x i64> %b) #0 {
330354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test81(
331354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
332354a04c8SVitaly Buka; CHECK-NEXT:  entry:
333354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
334354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
335354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
336354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
337354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
338354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
339354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
340dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
341dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
342dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
343dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
344dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
345dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.punpcklwd(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
346dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
347dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
348354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
349dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
350354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
351354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
352354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
353354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
35478341f36SVitaly Buka;
35578341f36SVitaly Bukaentry:
35678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
35778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
358b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
359b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
360b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.punpcklwd(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
361b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
36278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
36378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
36478341f36SVitaly Buka  ret i64 %5
36578341f36SVitaly Buka}
36678341f36SVitaly Buka
367b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.punpcklbw(<1 x i64>, <1 x i64>) nounwind readnone
36878341f36SVitaly Buka
369354a04c8SVitaly Bukadefine i64 @test80(<1 x i64> %a, <1 x i64> %b) #0 {
370354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test80(
371354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
372354a04c8SVitaly Buka; CHECK-NEXT:  entry:
373354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
374354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
375354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
376354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
377354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
378354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
379354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
380dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
381dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
382dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
383dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
384dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
385dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.punpcklbw(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
386dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
387dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
388354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
389dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
390354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
391354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
392354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
393354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
39478341f36SVitaly Buka;
39578341f36SVitaly Bukaentry:
39678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
39778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
398b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
399b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
400b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.punpcklbw(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
401b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
40278341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
40378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
40478341f36SVitaly Buka  ret i64 %5
40578341f36SVitaly Buka}
40678341f36SVitaly Buka
407b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.punpckhdq(<1 x i64>, <1 x i64>) nounwind readnone
40878341f36SVitaly Buka
409354a04c8SVitaly Bukadefine i64 @test79(<1 x i64> %a, <1 x i64> %b) #0 {
410354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test79(
411354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
412354a04c8SVitaly Buka; CHECK-NEXT:  entry:
413354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
414354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
415354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
416354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
417354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
418354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
419354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
420dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
421dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
422dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
423dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
424dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
425dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.punpckhdq(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
426dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
427dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
428354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
429dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
430354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
431354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
432354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
433354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
43478341f36SVitaly Buka;
43578341f36SVitaly Bukaentry:
43678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
43778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
438b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
439b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
440b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.punpckhdq(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
441b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
44278341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
44378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
44478341f36SVitaly Buka  ret i64 %5
44578341f36SVitaly Buka}
44678341f36SVitaly Buka
447b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.punpckhwd(<1 x i64>, <1 x i64>) nounwind readnone
44878341f36SVitaly Buka
449354a04c8SVitaly Bukadefine i64 @test78(<1 x i64> %a, <1 x i64> %b) #0 {
450354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test78(
451354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
452354a04c8SVitaly Buka; CHECK-NEXT:  entry:
453354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
454354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
455354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
456354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
457354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
458354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
459354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
460dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
461dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
462dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
463dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
464dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
465dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.punpckhwd(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
466dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
467dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
468354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
469dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
470354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
471354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
472354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
473354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
47478341f36SVitaly Buka;
47578341f36SVitaly Bukaentry:
47678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
47778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
478b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
479b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
480b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.punpckhwd(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
481b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
48278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
48378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
48478341f36SVitaly Buka  ret i64 %5
48578341f36SVitaly Buka}
48678341f36SVitaly Buka
487b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.punpckhbw(<1 x i64>, <1 x i64>) nounwind readnone
48878341f36SVitaly Buka
489354a04c8SVitaly Bukadefine i64 @test77(<1 x i64> %a, <1 x i64> %b) #0 {
490354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test77(
491354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
492354a04c8SVitaly Buka; CHECK-NEXT:  entry:
493354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
494354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
495354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
496354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
497354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
498354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
499354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
500dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
501dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
502dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
503dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
504dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
505dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.punpckhbw(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
506dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
507dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
508354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
509dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
510354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
511354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
512354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
513354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
51478341f36SVitaly Buka;
51578341f36SVitaly Bukaentry:
51678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
51778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
518b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
519b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
520b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.punpckhbw(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
521b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
52278341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
52378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
52478341f36SVitaly Buka  ret i64 %5
52578341f36SVitaly Buka}
52678341f36SVitaly Buka
527b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.packuswb(<1 x i64>, <1 x i64>) nounwind readnone
52878341f36SVitaly Buka
529354a04c8SVitaly Bukadefine i64 @test76(<1 x i64> %a, <1 x i64> %b) #0 {
530354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test76(
531354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
532354a04c8SVitaly Buka; CHECK-NEXT:  entry:
533354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
534354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
535354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
536354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP16]] to <4 x i16>
537354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
538354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP20:%.*]] = bitcast <1 x i64> [[TMP17]] to <4 x i16>
539354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
540dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP23:%.*]] = bitcast <4 x i16> [[TMP20]] to <1 x i64>
541dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
542dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
543dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
544dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP23]] to <4 x i16>
545dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
546354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = icmp ne <4 x i16> [[TMP8]], zeroinitializer
547354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = sext <4 x i1> [[TMP10]] to <4 x i16>
548354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = icmp ne <4 x i16> [[TMP9]], zeroinitializer
549354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = sext <4 x i1> [[TMP12]] to <4 x i16>
550dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
551dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
552dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP_VECTOR_PACK:%.*]] = call <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64> [[TMP14]], <1 x i64> [[TMP15]])
553dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP24:%.*]] = tail call <1 x i64> @llvm.x86.mmx.packuswb(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
554dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[_MSPROP_VECTOR_PACK]] to <8 x i8>
555dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP24]] to <8 x i8>
556354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i8> [[TMP18]] to <1 x i64>
557354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP21:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x i64>
558354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
559354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <1 x i64> [[TMP21]], i32 0
560354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
561354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP22]]
56278341f36SVitaly Buka;
56378341f36SVitaly Bukaentry:
56478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
56578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
566b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
567b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
568b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.packuswb(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
569b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
57078341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
57178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
57278341f36SVitaly Buka  ret i64 %5
57378341f36SVitaly Buka}
57478341f36SVitaly Buka
575b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.packssdw(<1 x i64>, <1 x i64>) nounwind readnone
57678341f36SVitaly Buka
577354a04c8SVitaly Bukadefine i64 @test75(<1 x i64> %a, <1 x i64> %b) #0 {
578354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test75(
579354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
580354a04c8SVitaly Buka; CHECK-NEXT:  entry:
581354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
582354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
583354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
584354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP16]] to <2 x i32>
585354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
586354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP20:%.*]] = bitcast <1 x i64> [[TMP17]] to <2 x i32>
587354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
588dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP23:%.*]] = bitcast <2 x i32> [[TMP20]] to <1 x i64>
589dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
590dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP19]] to <1 x i64>
591dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
592dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP23]] to <2 x i32>
593dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP7]] to <2 x i32>
594354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = icmp ne <2 x i32> [[TMP8]], zeroinitializer
595354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = sext <2 x i1> [[TMP10]] to <2 x i32>
596354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = icmp ne <2 x i32> [[TMP9]], zeroinitializer
597354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = sext <2 x i1> [[TMP12]] to <2 x i32>
598dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
599dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <2 x i32> [[TMP13]] to <1 x i64>
600dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP_VECTOR_PACK:%.*]] = call <1 x i64> @llvm.x86.mmx.packssdw(<1 x i64> [[TMP14]], <1 x i64> [[TMP15]])
601dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP24:%.*]] = tail call <1 x i64> @llvm.x86.mmx.packssdw(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
602dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[_MSPROP_VECTOR_PACK]] to <4 x i16>
603dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP24]] to <4 x i16>
604354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <4 x i16> [[TMP18]] to <1 x i64>
605354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP21:%.*]] = bitcast <4 x i16> [[TMP4]] to <1 x i64>
606354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
607354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <1 x i64> [[TMP21]], i32 0
608354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
609354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP22]]
61078341f36SVitaly Buka;
61178341f36SVitaly Bukaentry:
61278341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
61378341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
614b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
615b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
616b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.packssdw(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
617b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
61878341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
61978341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
62078341f36SVitaly Buka  ret i64 %5
62178341f36SVitaly Buka}
62278341f36SVitaly Buka
623b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64>, <1 x i64>) nounwind readnone
62478341f36SVitaly Buka
625354a04c8SVitaly Bukadefine i64 @test74(<1 x i64> %a, <1 x i64> %b) #0 {
626354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test74(
627354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
628354a04c8SVitaly Buka; CHECK-NEXT:  entry:
629354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
630354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
631354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
632354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP16]] to <4 x i16>
633354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
634354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP20:%.*]] = bitcast <1 x i64> [[TMP17]] to <4 x i16>
635354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
636dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP23:%.*]] = bitcast <4 x i16> [[TMP20]] to <1 x i64>
637dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
638dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
639dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
640dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP23]] to <4 x i16>
641dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
642354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = icmp ne <4 x i16> [[TMP8]], zeroinitializer
643354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = sext <4 x i1> [[TMP10]] to <4 x i16>
644354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = icmp ne <4 x i16> [[TMP9]], zeroinitializer
645354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = sext <4 x i1> [[TMP12]] to <4 x i16>
646dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
647dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
648dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP_VECTOR_PACK:%.*]] = call <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64> [[TMP14]], <1 x i64> [[TMP15]])
649dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP24:%.*]] = tail call <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
650dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[_MSPROP_VECTOR_PACK]] to <8 x i8>
651dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP24]] to <8 x i8>
652354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <8 x i8> [[TMP18]] to <1 x i64>
653354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP21:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x i64>
654354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
655354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <1 x i64> [[TMP21]], i32 0
656354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
657354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP22]]
65878341f36SVitaly Buka;
65978341f36SVitaly Bukaentry:
66078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
66178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
662b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
663b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
664b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
665b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
66678341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
66778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
66878341f36SVitaly Buka  ret i64 %5
66978341f36SVitaly Buka}
67078341f36SVitaly Buka
671b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrai.d(<1 x i64>, i32) nounwind readnone
67278341f36SVitaly Buka
673354a04c8SVitaly Bukadefine i64 @test73(<1 x i64> %a) #0 {
674354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test73(
675354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
676354a04c8SVitaly Buka; CHECK-NEXT:  entry:
677354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
678354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
679354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <2 x i32>
680354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
681dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP8]] to <1 x i64>
682dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
683dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.psrai.d(<1 x i64> [[TMP1]], i32 3)
684dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
685dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrai.d(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
686dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <2 x i32>
687dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
688dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP10]] to <1 x i64>
689dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
690354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
691354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
692354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
693354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
69478341f36SVitaly Buka;
69578341f36SVitaly Bukaentry:
69678341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
697b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
698b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrai.d(<1 x i64> %mmx_var.i, i32 3) nounwind
699b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <2 x i32>
70078341f36SVitaly Buka  %3 = bitcast <2 x i32> %2 to <1 x i64>
70178341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
70278341f36SVitaly Buka  ret i64 %4
70378341f36SVitaly Buka}
70478341f36SVitaly Buka
705b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64>, i32) nounwind readnone
70678341f36SVitaly Buka
707354a04c8SVitaly Bukadefine i64 @test72(<1 x i64> %a) #0 {
708354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test72(
709354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
710354a04c8SVitaly Buka; CHECK-NEXT:  entry:
711354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
712354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
713354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
714354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
715dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
716dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
717dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64> [[TMP1]], i32 3)
718dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
719dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
720dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <4 x i16>
721dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
722dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <4 x i16> [[TMP10]] to <1 x i64>
723dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
724354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
725354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
726354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
727354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
72878341f36SVitaly Buka;
72978341f36SVitaly Bukaentry:
73078341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
731b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
732b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64> %mmx_var.i, i32 3) nounwind
733b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <4 x i16>
73478341f36SVitaly Buka  %3 = bitcast <4 x i16> %2 to <1 x i64>
73578341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
73678341f36SVitaly Buka  ret i64 %4
73778341f36SVitaly Buka}
73878341f36SVitaly Buka
739354a04c8SVitaly Bukadefine i64 @test72_2(<1 x i64> %a) #0 {
740354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test72_2(
741354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
742354a04c8SVitaly Buka; CHECK-NEXT:  entry:
743354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
744354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
745354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
746354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
747dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
748dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
749dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64> [[TMP1]], i32 0)
750dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
751dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64> [[MMX_VAR_I]], i32 0) #[[ATTR2]]
752dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <4 x i16>
753dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
754dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <4 x i16> [[TMP10]] to <1 x i64>
755dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
756354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
757354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
758354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
759354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
76078341f36SVitaly Buka;
76178341f36SVitaly Bukaentry:
76278341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
763b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
764b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrai.w(<1 x i64> %mmx_var.i, i32 0) nounwind
765b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <4 x i16>
76678341f36SVitaly Buka  %3 = bitcast <4 x i16> %2 to <1 x i64>
76778341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
76878341f36SVitaly Buka  ret i64 %4
76978341f36SVitaly Buka}
77078341f36SVitaly Buka
771b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrli.q(<1 x i64>, i32) nounwind readnone
77278341f36SVitaly Buka
773354a04c8SVitaly Bukadefine i64 @test71(<1 x i64> %a) #0 {
774354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test71(
775354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
776354a04c8SVitaly Buka; CHECK-NEXT:  entry:
777354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
778354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
779354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
780354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
781dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
782dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
783dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.x86.mmx.psrli.q(<1 x i64> [[TMP2]], i32 3)
784dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = or <1 x i64> [[TMP3]], zeroinitializer
785dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrli.q(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
786dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <1 x i64> [[TMP6]] to i64
787dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
788354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
789354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP4]]
79078341f36SVitaly Buka;
79178341f36SVitaly Bukaentry:
79278341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
793b7e4fba6SJames Y Knight  %mmx_var.i = bitcast i64 %0 to <1 x i64>
794b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrli.q(<1 x i64> %mmx_var.i, i32 3) nounwind
795b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to i64
79678341f36SVitaly Buka  ret i64 %2
79778341f36SVitaly Buka}
79878341f36SVitaly Buka
799b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64>, i32) nounwind readnone
80078341f36SVitaly Buka
801354a04c8SVitaly Bukadefine i64 @test70(<1 x i64> %a) #0 {
802354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test70(
803354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
804354a04c8SVitaly Buka; CHECK-NEXT:  entry:
805354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
806354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
807354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <2 x i32>
808354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
809dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP8]] to <1 x i64>
810dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
811dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64> [[TMP1]], i32 3)
812dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
813dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
814dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <2 x i32>
815dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
816dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP10]] to <1 x i64>
817dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
818354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
819354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
820354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
821354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
82278341f36SVitaly Buka;
82378341f36SVitaly Bukaentry:
82478341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
825b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
826b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64> %mmx_var.i, i32 3) nounwind
827b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <2 x i32>
82878341f36SVitaly Buka  %3 = bitcast <2 x i32> %2 to <1 x i64>
82978341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
83078341f36SVitaly Buka  ret i64 %4
83178341f36SVitaly Buka}
83278341f36SVitaly Buka
833354a04c8SVitaly Bukadefine i64 @test70_2(<1 x i64> %a) #0 {
834354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test70_2(
835354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
836354a04c8SVitaly Buka; CHECK-NEXT:  entry:
837354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
838354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
839354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <2 x i32>
840354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
841dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP8]] to <1 x i64>
842dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
843dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64> [[TMP1]], i32 0)
844dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
845dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64> [[MMX_VAR_I]], i32 0) #[[ATTR2]]
846dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <2 x i32>
847dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
848dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP10]] to <1 x i64>
849dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
850354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
851354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
852354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
853354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
85478341f36SVitaly Buka;
85578341f36SVitaly Bukaentry:
85678341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
857b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
858b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrli.d(<1 x i64> %mmx_var.i, i32 0) nounwind
859b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <2 x i32>
86078341f36SVitaly Buka  %3 = bitcast <2 x i32> %2 to <1 x i64>
86178341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
86278341f36SVitaly Buka  ret i64 %4
86378341f36SVitaly Buka}
86478341f36SVitaly Buka
865b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrli.w(<1 x i64>, i32) nounwind readnone
86678341f36SVitaly Buka
867354a04c8SVitaly Bukadefine i64 @test69(<1 x i64> %a) #0 {
868354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test69(
869354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
870354a04c8SVitaly Buka; CHECK-NEXT:  entry:
871354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
872354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
873354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
874354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
875dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
876dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
877dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.psrli.w(<1 x i64> [[TMP1]], i32 3)
878dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
879dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrli.w(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
880dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <4 x i16>
881dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
882dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <4 x i16> [[TMP10]] to <1 x i64>
883dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
884354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
885354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
886354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
887354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
88878341f36SVitaly Buka;
88978341f36SVitaly Bukaentry:
89078341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
891b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
892b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.psrli.w(<1 x i64> %mmx_var.i, i32 3) nounwind
893b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <4 x i16>
89478341f36SVitaly Buka  %3 = bitcast <4 x i16> %2 to <1 x i64>
89578341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
89678341f36SVitaly Buka  ret i64 %4
89778341f36SVitaly Buka}
89878341f36SVitaly Buka
899b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pslli.q(<1 x i64>, i32) nounwind readnone
90078341f36SVitaly Buka
901354a04c8SVitaly Bukadefine i64 @test68(<1 x i64> %a) #0 {
902354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test68(
903354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
904354a04c8SVitaly Buka; CHECK-NEXT:  entry:
905354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
906354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
907354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
908354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
909dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
910dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
911dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.x86.mmx.pslli.q(<1 x i64> [[TMP2]], i32 3)
912dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = or <1 x i64> [[TMP3]], zeroinitializer
913dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pslli.q(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
914dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <1 x i64> [[TMP6]] to i64
915dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
916354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
917354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP4]]
91878341f36SVitaly Buka;
91978341f36SVitaly Bukaentry:
92078341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
921b7e4fba6SJames Y Knight  %mmx_var.i = bitcast i64 %0 to <1 x i64>
922b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.pslli.q(<1 x i64> %mmx_var.i, i32 3) nounwind
923b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to i64
92478341f36SVitaly Buka  ret i64 %2
92578341f36SVitaly Buka}
92678341f36SVitaly Buka
927b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pslli.d(<1 x i64>, i32) nounwind readnone
92878341f36SVitaly Buka
929354a04c8SVitaly Bukadefine i64 @test67(<1 x i64> %a) #0 {
930354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test67(
931354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
932354a04c8SVitaly Buka; CHECK-NEXT:  entry:
933354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
934354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
935354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <2 x i32>
936354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
937dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP8]] to <1 x i64>
938dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
939dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.pslli.d(<1 x i64> [[TMP1]], i32 3)
940dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
941dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pslli.d(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
942dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <2 x i32>
943dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
944dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP10]] to <1 x i64>
945dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
946354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
947354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
948354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
949354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
95078341f36SVitaly Buka;
95178341f36SVitaly Bukaentry:
95278341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
953b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
954b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.pslli.d(<1 x i64> %mmx_var.i, i32 3) nounwind
955b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <2 x i32>
95678341f36SVitaly Buka  %3 = bitcast <2 x i32> %2 to <1 x i64>
95778341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
95878341f36SVitaly Buka  ret i64 %4
95978341f36SVitaly Buka}
96078341f36SVitaly Buka
961b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64>, i32) nounwind readnone
96278341f36SVitaly Buka
963354a04c8SVitaly Bukadefine i64 @test66(<1 x i64> %a) #0 {
964354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test66(
965354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
966354a04c8SVitaly Buka; CHECK-NEXT:  entry:
967354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
968354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
969354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
970354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
971dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
972dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
973dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64> [[TMP1]], i32 3)
974dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
975dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64> [[MMX_VAR_I]], i32 3) #[[ATTR2]]
976dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <4 x i16>
977dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
978dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <4 x i16> [[TMP10]] to <1 x i64>
979dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
980354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
981354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
982354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
983354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
98478341f36SVitaly Buka;
98578341f36SVitaly Bukaentry:
98678341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
987b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
988b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64> %mmx_var.i, i32 3) nounwind
989b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <4 x i16>
99078341f36SVitaly Buka  %3 = bitcast <4 x i16> %2 to <1 x i64>
99178341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
99278341f36SVitaly Buka  ret i64 %4
99378341f36SVitaly Buka}
99478341f36SVitaly Buka
995354a04c8SVitaly Bukadefine i64 @test66_2(<1 x i64> %a) #0 {
996354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test66_2(
997354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
998354a04c8SVitaly Buka; CHECK-NEXT:  entry:
999354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1000354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1001354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
1002354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1003dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
1004dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1005dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = call <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64> [[TMP1]], i32 0)
1006dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = or <1 x i64> [[TMP2]], zeroinitializer
1007dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64> [[MMX_VAR_I]], i32 0) #[[ATTR2]]
1008dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <1 x i64> [[TMP11]] to <4 x i16>
1009dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
1010dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <4 x i16> [[TMP10]] to <1 x i64>
1011dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1012354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
1013354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1014354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP6]], ptr @__msan_retval_tls, align 8
1015354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
101678341f36SVitaly Buka;
101778341f36SVitaly Bukaentry:
101878341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
1019b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
1020b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.pslli.w(<1 x i64> %mmx_var.i, i32 0) nounwind
1021b7e4fba6SJames Y Knight  %2 = bitcast <1 x i64> %1 to <4 x i16>
102278341f36SVitaly Buka  %3 = bitcast <4 x i16> %2 to <1 x i64>
102378341f36SVitaly Buka  %4 = extractelement <1 x i64> %3, i32 0
102478341f36SVitaly Buka  ret i64 %4
102578341f36SVitaly Buka}
102678341f36SVitaly Buka
1027b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psra.d(<1 x i64>, <1 x i64>) nounwind readnone
102878341f36SVitaly Buka
1029354a04c8SVitaly Bukadefine i64 @test65(<1 x i64> %a, <1 x i64> %b) #0 {
1030354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test65(
1031354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1032354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1033354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1034354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1035354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1036354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
1037354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1038dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1039dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1040354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP10]], i32 0
1041354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1042dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1043dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1044dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
1045dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP15]], 0
1046354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
1047dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast i64 [[TMP14]] to <1 x i64>
1048dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = call <1 x i64> @llvm.x86.mmx.psra.d(<1 x i64> [[TMP4]], <1 x i64> [[MMX_VAR1_I]])
1049dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = or <1 x i64> [[TMP20]], [[TMP19]]
1050dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psra.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1051dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP12]] to <2 x i32>
1052dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP21]] to <2 x i32>
1053354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP18]] to <1 x i64>
1054354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <2 x i32> [[TMP5]] to <1 x i64>
1055354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
1056354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <1 x i64> [[TMP16]], i32 0
1057354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
1058354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP17]]
105978341f36SVitaly Buka;
106078341f36SVitaly Bukaentry:
106178341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
1062b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
106378341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1064b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1065b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psra.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1066b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
106778341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
106878341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
106978341f36SVitaly Buka  ret i64 %5
107078341f36SVitaly Buka}
107178341f36SVitaly Buka
1072b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psra.w(<1 x i64>, <1 x i64>) nounwind readnone
107378341f36SVitaly Buka
1074354a04c8SVitaly Bukadefine i64 @test64(<1 x i64> %a, <1 x i64> %b) #0 {
1075354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test64(
1076354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1077354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1078354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1079354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1080354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1081354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
1082354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1083dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1084dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1085354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP10]], i32 0
1086354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1087dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1088dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1089dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
1090dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP15]], 0
1091354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
1092dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast i64 [[TMP14]] to <1 x i64>
1093dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = call <1 x i64> @llvm.x86.mmx.psra.w(<1 x i64> [[TMP4]], <1 x i64> [[MMX_VAR1_I]])
1094dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = or <1 x i64> [[TMP20]], [[TMP19]]
1095dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psra.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1096dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP12]] to <4 x i16>
1097dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP21]] to <4 x i16>
1098354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP18]] to <1 x i64>
1099354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP5]] to <1 x i64>
1100354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
1101354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <1 x i64> [[TMP16]], i32 0
1102354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
1103354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP17]]
110478341f36SVitaly Buka;
110578341f36SVitaly Bukaentry:
110678341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
1107b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
110878341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1109b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1110b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psra.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1111b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
111278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
111378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
111478341f36SVitaly Buka  ret i64 %5
111578341f36SVitaly Buka}
111678341f36SVitaly Buka
1117b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrl.q(<1 x i64>, <1 x i64>) nounwind readnone
111878341f36SVitaly Buka
1119354a04c8SVitaly Bukadefine i64 @test63(<1 x i64> %a, <1 x i64> %b) #0 {
1120354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test63(
1121354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1122354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1123354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1124354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1125354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1126354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP7]], i32 0
1127354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
1128dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1129dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
1130354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP8]], i32 0
1131354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1132dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = bitcast i64 [[_MSPROP1]] to <1 x i64>
1133dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1134dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <1 x i64> [[TMP13]] to i64
1135dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = icmp ne i64 [[TMP6]], 0
1136354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = sext i1 [[TMP9]] to i64
1137dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast i64 [[TMP10]] to <1 x i64>
1138dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = call <1 x i64> @llvm.x86.mmx.psrl.q(<1 x i64> [[TMP3]], <1 x i64> [[MMX_VAR1_I]])
1139dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = or <1 x i64> [[TMP15]], [[TMP14]]
1140dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrl.q(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1141dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP16]] to i64
1142dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP12]] to i64
1143354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP11]], ptr @__msan_retval_tls, align 8
1144354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP5]]
114578341f36SVitaly Buka;
114678341f36SVitaly Bukaentry:
114778341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
1148b7e4fba6SJames Y Knight  %mmx_var.i = bitcast i64 %0 to <1 x i64>
114978341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1150b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1151b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psrl.q(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1152b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
115378341f36SVitaly Buka  ret i64 %3
115478341f36SVitaly Buka}
115578341f36SVitaly Buka
1156b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrl.d(<1 x i64>, <1 x i64>) nounwind readnone
115778341f36SVitaly Buka
1158354a04c8SVitaly Bukadefine i64 @test62(<1 x i64> %a, <1 x i64> %b) #0 {
1159354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test62(
1160354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1161354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1162354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1163354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1164354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1165354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
1166354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1167dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1168dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1169354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP10]], i32 0
1170354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1171dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1172dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1173dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
1174dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP15]], 0
1175354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
1176dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast i64 [[TMP14]] to <1 x i64>
1177dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = call <1 x i64> @llvm.x86.mmx.psrl.d(<1 x i64> [[TMP4]], <1 x i64> [[MMX_VAR1_I]])
1178dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = or <1 x i64> [[TMP20]], [[TMP19]]
1179dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrl.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1180dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP12]] to <2 x i32>
1181dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP21]] to <2 x i32>
1182354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP18]] to <1 x i64>
1183354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <2 x i32> [[TMP5]] to <1 x i64>
1184354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
1185354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <1 x i64> [[TMP16]], i32 0
1186354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
1187354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP17]]
118878341f36SVitaly Buka;
118978341f36SVitaly Bukaentry:
119078341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
1191b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
119278341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1193b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1194b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psrl.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1195b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
119678341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
119778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
119878341f36SVitaly Buka  ret i64 %5
119978341f36SVitaly Buka}
120078341f36SVitaly Buka
1201b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psrl.w(<1 x i64>, <1 x i64>) nounwind readnone
120278341f36SVitaly Buka
1203354a04c8SVitaly Bukadefine i64 @test61(<1 x i64> %a, <1 x i64> %b) #0 {
1204354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test61(
1205354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1206354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1207354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1208354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1209354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1210354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
1211354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1212dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1213dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1214354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP10]], i32 0
1215354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1216dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1217dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1218dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
1219dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP15]], 0
1220354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
1221dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast i64 [[TMP14]] to <1 x i64>
1222dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = call <1 x i64> @llvm.x86.mmx.psrl.w(<1 x i64> [[TMP4]], <1 x i64> [[MMX_VAR1_I]])
1223dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = or <1 x i64> [[TMP20]], [[TMP19]]
1224dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psrl.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1225dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP12]] to <4 x i16>
1226dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP21]] to <4 x i16>
1227354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP18]] to <1 x i64>
1228354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP5]] to <1 x i64>
1229354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
1230354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <1 x i64> [[TMP16]], i32 0
1231354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
1232354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP17]]
123378341f36SVitaly Buka;
123478341f36SVitaly Bukaentry:
123578341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
1236b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
123778341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1238b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1239b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psrl.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1240b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
124178341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
124278341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
124378341f36SVitaly Buka  ret i64 %5
124478341f36SVitaly Buka}
124578341f36SVitaly Buka
1246b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psll.q(<1 x i64>, <1 x i64>) nounwind readnone
124778341f36SVitaly Buka
1248354a04c8SVitaly Bukadefine i64 @test60(<1 x i64> %a, <1 x i64> %b) #0 {
1249354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test60(
1250354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1251354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1252354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1253354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1254354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1255354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP7]], i32 0
1256354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
1257dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1258dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
1259354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP8]], i32 0
1260354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1261dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = bitcast i64 [[_MSPROP1]] to <1 x i64>
1262dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1263dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <1 x i64> [[TMP13]] to i64
1264dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = icmp ne i64 [[TMP6]], 0
1265354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = sext i1 [[TMP9]] to i64
1266dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast i64 [[TMP10]] to <1 x i64>
1267dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = call <1 x i64> @llvm.x86.mmx.psll.q(<1 x i64> [[TMP3]], <1 x i64> [[MMX_VAR1_I]])
1268dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = or <1 x i64> [[TMP15]], [[TMP14]]
1269dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psll.q(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1270dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP16]] to i64
1271dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP12]] to i64
1272354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP11]], ptr @__msan_retval_tls, align 8
1273354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP5]]
127478341f36SVitaly Buka;
127578341f36SVitaly Bukaentry:
127678341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
1277b7e4fba6SJames Y Knight  %mmx_var.i = bitcast i64 %0 to <1 x i64>
127878341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1279b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1280b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psll.q(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1281b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
128278341f36SVitaly Buka  ret i64 %3
128378341f36SVitaly Buka}
128478341f36SVitaly Buka
1285b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psll.d(<1 x i64>, <1 x i64>) nounwind readnone
128678341f36SVitaly Buka
1287354a04c8SVitaly Bukadefine i64 @test59(<1 x i64> %a, <1 x i64> %b) #0 {
1288354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test59(
1289354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1290354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1291354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1292354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1293354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1294354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
1295354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1296dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1297dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1298354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP10]], i32 0
1299354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1300dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1301dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1302dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
1303dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP15]], 0
1304354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
1305dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast i64 [[TMP14]] to <1 x i64>
1306dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = call <1 x i64> @llvm.x86.mmx.psll.d(<1 x i64> [[TMP4]], <1 x i64> [[MMX_VAR1_I]])
1307dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = or <1 x i64> [[TMP20]], [[TMP19]]
1308dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psll.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1309dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP12]] to <2 x i32>
1310dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP21]] to <2 x i32>
1311354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP18]] to <1 x i64>
1312354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <2 x i32> [[TMP5]] to <1 x i64>
1313354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
1314354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <1 x i64> [[TMP16]], i32 0
1315354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
1316354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP17]]
131778341f36SVitaly Buka;
131878341f36SVitaly Bukaentry:
131978341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
1320b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %0 to <1 x i64>
132178341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1322b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1323b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psll.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1324b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
132578341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
132678341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
132778341f36SVitaly Buka  ret i64 %5
132878341f36SVitaly Buka}
132978341f36SVitaly Buka
1330b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psll.w(<1 x i64>, <1 x i64>) nounwind readnone
133178341f36SVitaly Buka
1332354a04c8SVitaly Bukadefine i64 @test58(<1 x i64> %a, <1 x i64> %b) #0 {
1333354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test58(
1334354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1335354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1336354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1337354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1338354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1339354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
1340354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1341dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1342dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1343354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP10]], i32 0
1344354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1345dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1346dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1347dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP8]] to i64
1348dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[TMP15]], 0
1349354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
1350dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast i64 [[TMP14]] to <1 x i64>
1351dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = call <1 x i64> @llvm.x86.mmx.psll.w(<1 x i64> [[TMP4]], <1 x i64> [[MMX_VAR1_I]])
1352dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = or <1 x i64> [[TMP20]], [[TMP19]]
1353dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psll.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1354dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP12]] to <4 x i16>
1355dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP21]] to <4 x i16>
1356354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP18]] to <1 x i64>
1357354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP5]] to <1 x i64>
1358354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
1359354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <1 x i64> [[TMP16]], i32 0
1360354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
1361354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP17]]
136278341f36SVitaly Buka;
136378341f36SVitaly Bukaentry:
136478341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
1365b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %0 to <1 x i64>
136678341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1367b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast i64 %1 to <1 x i64>
1368b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psll.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1369b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
137078341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
137178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
137278341f36SVitaly Buka  ret i64 %5
137378341f36SVitaly Buka}
137478341f36SVitaly Buka
1375b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pxor(<1 x i64>, <1 x i64>) nounwind readnone
137678341f36SVitaly Buka
1377354a04c8SVitaly Bukadefine i64 @test56(<1 x i64> %a, <1 x i64> %b) #0 {
1378354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test56(
1379354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1380354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1381354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1382354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1383354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1384354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
1385354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
1386354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
1387354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1388dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
1389dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
1390dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1391dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1392dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1393dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pxor(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1394dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
1395dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
1396354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
1397dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
1398354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1399354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1400354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1401354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
140278341f36SVitaly Buka;
140378341f36SVitaly Bukaentry:
140478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
140578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
1406b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
1407b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
1408b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pxor(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1409b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
141078341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
141178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
141278341f36SVitaly Buka  ret i64 %5
141378341f36SVitaly Buka}
141478341f36SVitaly Buka
1415b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.por(<1 x i64>, <1 x i64>) nounwind readnone
141678341f36SVitaly Buka
1417354a04c8SVitaly Bukadefine i64 @test55(<1 x i64> %a, <1 x i64> %b) #0 {
1418354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test55(
1419354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1420354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1421354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1422354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1423354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1424354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
1425354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
1426354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
1427354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1428dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
1429dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
1430dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1431dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1432dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1433dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.por(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1434dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
1435dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
1436354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
1437dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
1438354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1439354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1440354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1441354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
144278341f36SVitaly Buka;
144378341f36SVitaly Bukaentry:
144478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
144578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
1446b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
1447b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
1448b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.por(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1449b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
145078341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
145178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
145278341f36SVitaly Buka  ret i64 %5
145378341f36SVitaly Buka}
145478341f36SVitaly Buka
1455b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pandn(<1 x i64>, <1 x i64>) nounwind readnone
145678341f36SVitaly Buka
1457354a04c8SVitaly Bukadefine i64 @test54(<1 x i64> %a, <1 x i64> %b) #0 {
1458354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test54(
1459354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1460354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1461354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1462354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1463354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1464354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
1465354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
1466354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
1467354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1468dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
1469dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
1470dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1471dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1472dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1473dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pandn(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1474dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
1475dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
1476354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
1477dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
1478354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1479354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1480354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1481354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
148278341f36SVitaly Buka;
148378341f36SVitaly Bukaentry:
148478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
148578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
1486b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
1487b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
1488b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pandn(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1489b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
149078341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
149178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
149278341f36SVitaly Buka  ret i64 %5
149378341f36SVitaly Buka}
149478341f36SVitaly Buka
1495b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pand(<1 x i64>, <1 x i64>) nounwind readnone
149678341f36SVitaly Buka
1497354a04c8SVitaly Bukadefine i64 @test53(<1 x i64> %a, <1 x i64> %b) #0 {
1498354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test53(
1499354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1500354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1501354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1502354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1503354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1504354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
1505354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
1506354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
1507354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1508dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
1509dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
1510dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1511dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1512dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1513dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pand(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1514dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
1515dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
1516354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
1517dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
1518354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1519354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1520354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1521354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
152278341f36SVitaly Buka;
152378341f36SVitaly Bukaentry:
152478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
152578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
1526b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
1527b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
1528b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pand(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1529b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
153078341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
153178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
153278341f36SVitaly Buka  ret i64 %5
153378341f36SVitaly Buka}
153478341f36SVitaly Buka
1535b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64>, <1 x i64>) nounwind readnone
153678341f36SVitaly Buka
1537354a04c8SVitaly Bukadefine i64 @test52(<1 x i64> %a, <1 x i64> %b) #0 {
1538354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test52(
1539354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1540354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1541354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1542354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1543354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1544354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
1545354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1546354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
1547354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1548dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1549dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1550dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1551dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1552dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1553dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1554dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
1555dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1556354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
1557dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1558354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1559354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1560354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1561354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
156278341f36SVitaly Buka;
156378341f36SVitaly Bukaentry:
156478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
156578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1566b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1567b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1568b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1569b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
157078341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
157178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
157278341f36SVitaly Buka  ret i64 %5
157378341f36SVitaly Buka}
157478341f36SVitaly Buka
1575354a04c8SVitaly Bukadefine i64 @test51(<1 x i64> %a, <1 x i64> %b) #0 {
1576354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test51(
1577354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1578354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1579354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1580354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1581354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1582354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
1583354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1584354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
1585354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1586dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1587dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1588dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1589dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1590dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1591dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1592dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
1593dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1594354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
1595dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1596354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1597354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1598354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1599354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
160078341f36SVitaly Buka;
160178341f36SVitaly Bukaentry:
160278341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
160378341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1604b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1605b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1606b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1607b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
160878341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
160978341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
161078341f36SVitaly Buka  ret i64 %5
161178341f36SVitaly Buka}
161278341f36SVitaly Buka
1613b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmulh.w(<1 x i64>, <1 x i64>) nounwind readnone
161478341f36SVitaly Buka
1615354a04c8SVitaly Bukadefine i64 @test50(<1 x i64> %a, <1 x i64> %b) #0 {
1616354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test50(
1617354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1618354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1619354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1620354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1621354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1622354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
1623354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1624354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
1625354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1626dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1627dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1628dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1629dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1630dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1631dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmulh.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1632dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
1633dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1634354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
1635dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1636354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1637354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1638354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1639354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
164078341f36SVitaly Buka;
164178341f36SVitaly Bukaentry:
164278341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
164378341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1644b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1645b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1646b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmulh.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1647b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
164878341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
164978341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
165078341f36SVitaly Buka  ret i64 %5
165178341f36SVitaly Buka}
165278341f36SVitaly Buka
1653b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmadd.wd(<1 x i64>, <1 x i64>) nounwind readnone
165478341f36SVitaly Buka
1655354a04c8SVitaly Bukadefine i64 @test49(<1 x i64> %a, <1 x i64> %b) #0 {
1656354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test49(
1657354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1658354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1659354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1660354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1661354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1662354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP13]] to <4 x i16>
1663354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1664354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1665354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1666dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
1667dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1668dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1669dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1670dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1671dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
1672354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = icmp ne <2 x i32> [[TMP9]], zeroinitializer
1673354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = sext <2 x i1> [[TMP10]] to <2 x i32>
1674dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1675dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmadd.wd(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1676dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP12]] to <2 x i32>
1677dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP20:%.*]] = bitcast <1 x i64> [[TMP14]] to <2 x i32>
1678354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <2 x i32> [[TMP3]] to <1 x i64>
1679dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = bitcast <2 x i32> [[TMP20]] to <1 x i64>
1680dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP17]], i32 0
1681dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <1 x i64> [[TMP21]], i32 0
1682354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1683354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP18]]
168478341f36SVitaly Buka;
168578341f36SVitaly Bukaentry:
168678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
168778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1688b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1689b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1690b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmadd.wd(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1691b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
169278341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
169378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
169478341f36SVitaly Buka  ret i64 %5
169578341f36SVitaly Buka}
169678341f36SVitaly Buka
1697b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psubus.w(<1 x i64>, <1 x i64>) nounwind readnone
169878341f36SVitaly Buka
1699354a04c8SVitaly Bukadefine i64 @test48(<1 x i64> %a, <1 x i64> %b) #0 {
1700354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test48(
1701354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1702354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1703354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1704354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1705354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1706354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
1707354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1708354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
1709354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1710dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1711dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1712dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1713dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1714dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1715dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psubus.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1716dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
1717dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1718354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
1719dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1720354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1721354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1722354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1723354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
172478341f36SVitaly Buka;
172578341f36SVitaly Bukaentry:
172678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
172778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1728b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1729b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1730b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psubus.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1731b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
173278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
173378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
173478341f36SVitaly Buka  ret i64 %5
173578341f36SVitaly Buka}
173678341f36SVitaly Buka
1737b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psubus.b(<1 x i64>, <1 x i64>) nounwind readnone
173878341f36SVitaly Buka
1739354a04c8SVitaly Bukadefine i64 @test47(<1 x i64> %a, <1 x i64> %b) #0 {
1740354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test47(
1741354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1742354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1743354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1744354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1745354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1746354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
1747354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
1748354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
1749354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
1750dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
1751dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
1752dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
1753dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
1754dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1755dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psubus.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1756dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
1757dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
1758354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
1759dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
1760354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1761354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1762354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1763354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
176478341f36SVitaly Buka;
176578341f36SVitaly Bukaentry:
176678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
176778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
1768b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
1769b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
1770b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psubus.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1771b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
177278341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
177378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
177478341f36SVitaly Buka  ret i64 %5
177578341f36SVitaly Buka}
177678341f36SVitaly Buka
1777b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psubs.w(<1 x i64>, <1 x i64>) nounwind readnone
177878341f36SVitaly Buka
1779354a04c8SVitaly Bukadefine i64 @test46(<1 x i64> %a, <1 x i64> %b) #0 {
1780354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test46(
1781354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1782354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1783354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1784354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1785354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1786354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
1787354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1788354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
1789354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1790dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1791dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1792dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1793dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1794dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1795dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psubs.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1796dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
1797dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1798354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
1799dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1800354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1801354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1802354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1803354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
180478341f36SVitaly Buka;
180578341f36SVitaly Bukaentry:
180678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
180778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1808b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1809b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1810b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psubs.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1811b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
181278341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
181378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
181478341f36SVitaly Buka  ret i64 %5
181578341f36SVitaly Buka}
181678341f36SVitaly Buka
1817b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psubs.b(<1 x i64>, <1 x i64>) nounwind readnone
181878341f36SVitaly Buka
1819354a04c8SVitaly Bukadefine i64 @test45(<1 x i64> %a, <1 x i64> %b) #0 {
1820354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test45(
1821354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1822354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1823354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1824354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1825354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1826354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
1827354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
1828354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
1829354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
1830dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
1831dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
1832dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
1833dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
1834dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1835dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psubs.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1836dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
1837dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
1838354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
1839dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
1840354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1841354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1842354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1843354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
184478341f36SVitaly Buka;
184578341f36SVitaly Bukaentry:
184678341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
184778341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
1848b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
1849b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
1850b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psubs.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1851b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
185278341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
185378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
185478341f36SVitaly Buka  ret i64 %5
185578341f36SVitaly Buka}
185678341f36SVitaly Buka
1857354a04c8SVitaly Bukadefine i64 @test44(<1 x i64> %a, <1 x i64> %b) #0 {
1858354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test44(
1859354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1860354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1861354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1862354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1863354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1864354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1865354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
1866dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
1867dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
1868354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
1869354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
1870dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP1]] to <1 x i64>
1871dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
1872dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP3:%.*]] = or <1 x i64> [[TMP7]], [[TMP8]]
1873dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psub.q(<1 x i64> [[MMX_VAR]], <1 x i64> [[MMX_VAR1]])
1874dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP2:%.*]] = bitcast <1 x i64> [[_MSPROP3]] to i64
1875dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP6]] to i64
1876354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[_MSPROP2]], ptr @__msan_retval_tls, align 8
1877354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
187878341f36SVitaly Buka;
187978341f36SVitaly Bukaentry:
188078341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
1881b7e4fba6SJames Y Knight  %mmx_var = bitcast i64 %0 to <1 x i64>
188278341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
1883b7e4fba6SJames Y Knight  %mmx_var1 = bitcast i64 %1 to <1 x i64>
1884b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psub.q(<1 x i64> %mmx_var, <1 x i64> %mmx_var1)
1885b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
188678341f36SVitaly Buka  ret i64 %3
188778341f36SVitaly Buka}
188878341f36SVitaly Buka
1889b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psub.q(<1 x i64>, <1 x i64>) nounwind readnone
189078341f36SVitaly Buka
1891b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psub.d(<1 x i64>, <1 x i64>) nounwind readnone
189278341f36SVitaly Buka
1893354a04c8SVitaly Bukadefine i64 @test43(<1 x i64> %a, <1 x i64> %b) #0 {
1894354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test43(
1895354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1896354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1897354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1898354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1899354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1900354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
1901354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
1902354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
1903354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
1904dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
1905dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
1906dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
1907dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
1908dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1909dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psub.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1910dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
1911dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
1912354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
1913dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
1914354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1915354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1916354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1917354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
191878341f36SVitaly Buka;
191978341f36SVitaly Bukaentry:
192078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
192178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
1922b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
1923b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
1924b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psub.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1925b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
192678341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
192778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
192878341f36SVitaly Buka  ret i64 %5
192978341f36SVitaly Buka}
193078341f36SVitaly Buka
1931b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psub.w(<1 x i64>, <1 x i64>) nounwind readnone
193278341f36SVitaly Buka
1933354a04c8SVitaly Bukadefine i64 @test42(<1 x i64> %a, <1 x i64> %b) #0 {
1934354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test42(
1935354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1936354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1937354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1938354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1939354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1940354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
1941354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
1942354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
1943354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
1944dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
1945dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
1946dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
1947dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
1948dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1949dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psub.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1950dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
1951dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
1952354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
1953dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
1954354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1955354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1956354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1957354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
195878341f36SVitaly Buka;
195978341f36SVitaly Bukaentry:
196078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
196178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
1962b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
1963b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
1964b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psub.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
1965b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
196678341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
196778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
196878341f36SVitaly Buka  ret i64 %5
196978341f36SVitaly Buka}
197078341f36SVitaly Buka
1971b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psub.b(<1 x i64>, <1 x i64>) nounwind readnone
197278341f36SVitaly Buka
1973354a04c8SVitaly Bukadefine i64 @test41(<1 x i64> %a, <1 x i64> %b) #0 {
1974354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test41(
1975354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
1976354a04c8SVitaly Buka; CHECK-NEXT:  entry:
1977354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1978354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
1979354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1980354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
1981354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
1982354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
1983354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
1984dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
1985dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
1986dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
1987dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
1988dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
1989dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psub.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
1990dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
1991dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
1992354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
1993dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
1994354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
1995354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
1996354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
1997354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
199878341f36SVitaly Buka;
199978341f36SVitaly Bukaentry:
200078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
200178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2002b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2003b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2004b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psub.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2005b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
200678341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
200778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
200878341f36SVitaly Buka  ret i64 %5
200978341f36SVitaly Buka}
201078341f36SVitaly Buka
2011b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.paddus.w(<1 x i64>, <1 x i64>) nounwind readnone
201278341f36SVitaly Buka
2013354a04c8SVitaly Bukadefine i64 @test40(<1 x i64> %a, <1 x i64> %b) #0 {
2014354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test40(
2015354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2016354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2017354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2018354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2019354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2020354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2021354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2022354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2023354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2024dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2025dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2026dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2027dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2028dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2029dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.paddus.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2030dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2031dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2032354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2033dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2034354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2035354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2036354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2037354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
203878341f36SVitaly Buka;
203978341f36SVitaly Bukaentry:
204078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
204178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2042b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2043b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2044b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.paddus.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2045b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
204678341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
204778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
204878341f36SVitaly Buka  ret i64 %5
204978341f36SVitaly Buka}
205078341f36SVitaly Buka
2051b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.paddus.b(<1 x i64>, <1 x i64>) nounwind readnone
205278341f36SVitaly Buka
2053354a04c8SVitaly Bukadefine i64 @test39(<1 x i64> %a, <1 x i64> %b) #0 {
2054354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test39(
2055354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2056354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2057354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2058354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2059354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2060354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
2061354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2062354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
2063354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2064dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
2065dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2066dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
2067dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2068dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2069dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.paddus.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2070dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
2071dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
2072354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
2073dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
2074354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2075354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2076354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2077354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
207878341f36SVitaly Buka;
207978341f36SVitaly Bukaentry:
208078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
208178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2082b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2083b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2084b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.paddus.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2085b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
208678341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
208778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
208878341f36SVitaly Buka  ret i64 %5
208978341f36SVitaly Buka}
209078341f36SVitaly Buka
2091b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.padds.w(<1 x i64>, <1 x i64>) nounwind readnone
209278341f36SVitaly Buka
2093354a04c8SVitaly Bukadefine i64 @test38(<1 x i64> %a, <1 x i64> %b) #0 {
2094354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test38(
2095354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2096354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2097354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2098354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2099354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2100354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2101354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2102354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2103354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2104dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2105dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2106dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2107dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2108dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2109dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.padds.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2110dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2111dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2112354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2113dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2114354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2115354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2116354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2117354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
211878341f36SVitaly Buka;
211978341f36SVitaly Bukaentry:
212078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
212178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2122b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2123b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2124b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.padds.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2125b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
212678341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
212778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
212878341f36SVitaly Buka  ret i64 %5
212978341f36SVitaly Buka}
213078341f36SVitaly Buka
2131b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.padds.b(<1 x i64>, <1 x i64>) nounwind readnone
213278341f36SVitaly Buka
2133354a04c8SVitaly Bukadefine i64 @test37(<1 x i64> %a, <1 x i64> %b) #0 {
2134354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test37(
2135354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2136354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2137354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2138354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2139354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2140354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
2141354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2142354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
2143354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2144dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
2145dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2146dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
2147dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2148dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2149dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.padds.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2150dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
2151dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
2152354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
2153dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
2154354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2155354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2156354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2157354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
215878341f36SVitaly Buka;
215978341f36SVitaly Bukaentry:
216078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
216178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2162b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2163b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2164b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.padds.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2165b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
216678341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
216778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
216878341f36SVitaly Buka  ret i64 %5
216978341f36SVitaly Buka}
217078341f36SVitaly Buka
2171b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.padd.q(<1 x i64>, <1 x i64>) nounwind readnone
217278341f36SVitaly Buka
2173354a04c8SVitaly Bukadefine i64 @test36(<1 x i64> %a, <1 x i64> %b) #0 {
2174354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test36(
2175354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2176354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2177354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2178354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2179354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2180354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2181354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
2182dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
2183dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
2184354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP5]], i32 0
2185354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
2186dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i64 [[_MSPROP1]] to <1 x i64>
2187dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
2188dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP3:%.*]] = or <1 x i64> [[TMP7]], [[TMP8]]
2189dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = tail call <1 x i64> @llvm.x86.mmx.padd.q(<1 x i64> [[MMX_VAR]], <1 x i64> [[MMX_VAR1]])
2190dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP2:%.*]] = bitcast <1 x i64> [[_MSPROP3]] to i64
2191dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP6]] to i64
2192354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[_MSPROP2]], ptr @__msan_retval_tls, align 8
2193354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
219478341f36SVitaly Buka;
219578341f36SVitaly Bukaentry:
219678341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
2197b7e4fba6SJames Y Knight  %mmx_var = bitcast i64 %0 to <1 x i64>
219878341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
2199b7e4fba6SJames Y Knight  %mmx_var1 = bitcast i64 %1 to <1 x i64>
2200b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.padd.q(<1 x i64> %mmx_var, <1 x i64> %mmx_var1)
2201b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
220278341f36SVitaly Buka  ret i64 %3
220378341f36SVitaly Buka}
220478341f36SVitaly Buka
2205b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64>, <1 x i64>) nounwind readnone
220678341f36SVitaly Buka
2207354a04c8SVitaly Bukadefine i64 @test35(<1 x i64> %a, <1 x i64> %b) #0 {
2208354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test35(
2209354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2210354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2211354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2212354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2213354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2214354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
2215354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
2216354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
2217354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
2218dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP14]] to <1 x i64>
2219dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
2220dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
2221dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
2222dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2223dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2224dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
2225dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <2 x i32>
2226354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
2227dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <2 x i32> [[TMP16]] to <1 x i64>
2228354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2229354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2230354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2231354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
223278341f36SVitaly Buka;
223378341f36SVitaly Bukaentry:
223478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
223578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
2236b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
2237b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
2238b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2239b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
224078341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
224178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
224278341f36SVitaly Buka  ret i64 %5
224378341f36SVitaly Buka}
224478341f36SVitaly Buka
2245b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.padd.w(<1 x i64>, <1 x i64>) nounwind readnone
224678341f36SVitaly Buka
2247354a04c8SVitaly Bukadefine i64 @test34(<1 x i64> %a, <1 x i64> %b) #0 {
2248354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test34(
2249354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2250354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2251354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2252354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2253354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2254354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2255354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2256354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2257354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2258dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2259dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2260dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2261dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2262dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2263dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.padd.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2264dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2265dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2266354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2267dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2268354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2269354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2270354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2271354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
227278341f36SVitaly Buka;
227378341f36SVitaly Bukaentry:
227478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
227578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2276b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2277b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2278b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.padd.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2279b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
228078341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
228178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
228278341f36SVitaly Buka  ret i64 %5
228378341f36SVitaly Buka}
228478341f36SVitaly Buka
2285b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64>, <1 x i64>) nounwind readnone
228678341f36SVitaly Buka
2287354a04c8SVitaly Bukadefine i64 @test33(<1 x i64> %a, <1 x i64> %b) #0 {
2288354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test33(
2289354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2290354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2291354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2292354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2293354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2294354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
2295354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2296354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
2297354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2298dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
2299dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2300dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
2301dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2302dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2303dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2304dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
2305dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
2306354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
2307dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
2308354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2309354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2310354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2311354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
231278341f36SVitaly Buka;
231378341f36SVitaly Bukaentry:
231478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
231578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2316b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2317b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2318b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2319b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
232078341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
232178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
232278341f36SVitaly Buka  ret i64 %5
232378341f36SVitaly Buka}
232478341f36SVitaly Buka
2325b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.psad.bw(<1 x i64>, <1 x i64>) nounwind readnone
232678341f36SVitaly Buka
2327354a04c8SVitaly Bukadefine i64 @test32(<1 x i64> %a, <1 x i64> %b) #0 {
2328354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test32(
2329354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2330354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2331354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2332354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2333354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2334354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP5]] to <8 x i8>
2335354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2336354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP12]] to <8 x i8>
2337354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2338dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x i64>
2339dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2340dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP13]] to <1 x i64>
2341dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2342dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2343dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP16]] to i64
2344354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = icmp ne i64 [[TMP8]], 0
2345354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = sext i1 [[TMP9]] to i64
2346354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = lshr i64 [[TMP10]], 48
2347dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i64 [[TMP11]] to <1 x i64>
2348dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = tail call <1 x i64> @llvm.x86.mmx.psad.bw(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2349dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <1 x i64> [[TMP17]] to i64
2350dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP14]] to i64
2351dfeb3991SJames Y Knight; CHECK-NEXT:    store i64 [[TMP15]], ptr @__msan_retval_tls, align 8
2352354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
235378341f36SVitaly Buka;
235478341f36SVitaly Bukaentry:
235578341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
235678341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2357b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2358b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2359b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.psad.bw(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2360b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
236178341f36SVitaly Buka  ret i64 %3
236278341f36SVitaly Buka}
236378341f36SVitaly Buka
2364b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmins.w(<1 x i64>, <1 x i64>) nounwind readnone
236578341f36SVitaly Buka
2366354a04c8SVitaly Bukadefine i64 @test31(<1 x i64> %a, <1 x i64> %b) #0 {
2367354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test31(
2368354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2369354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2370354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2371354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2372354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2373354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2374354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2375354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2376354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2377dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2378dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2379dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2380dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2381dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2382dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmins.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2383dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2384dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2385354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2386dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2387354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2388354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2389354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2390354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
239178341f36SVitaly Buka;
239278341f36SVitaly Bukaentry:
239378341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
239478341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2395b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2396b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2397b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmins.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2398b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
239978341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
240078341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
240178341f36SVitaly Buka  ret i64 %5
240278341f36SVitaly Buka}
240378341f36SVitaly Buka
2404b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pminu.b(<1 x i64>, <1 x i64>) nounwind readnone
240578341f36SVitaly Buka
2406354a04c8SVitaly Bukadefine i64 @test30(<1 x i64> %a, <1 x i64> %b) #0 {
2407354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test30(
2408354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2409354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2410354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2411354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2412354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2413354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
2414354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2415354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
2416354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2417dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
2418dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2419dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
2420dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2421dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2422dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pminu.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2423dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
2424dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
2425354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
2426dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
2427354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2428354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2429354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2430354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
243178341f36SVitaly Buka;
243278341f36SVitaly Bukaentry:
243378341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
243478341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2435b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2436b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2437b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pminu.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2438b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
243978341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
244078341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
244178341f36SVitaly Buka  ret i64 %5
244278341f36SVitaly Buka}
244378341f36SVitaly Buka
2444b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmaxs.w(<1 x i64>, <1 x i64>) nounwind readnone
244578341f36SVitaly Buka
2446354a04c8SVitaly Bukadefine i64 @test29(<1 x i64> %a, <1 x i64> %b) #0 {
2447354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test29(
2448354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2449354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2450354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2451354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2452354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2453354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2454354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2455354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2456354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2457dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2458dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2459dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2460dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2461dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2462dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmaxs.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2463dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2464dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2465354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2466dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2467354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2468354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2469354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2470354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
247178341f36SVitaly Buka;
247278341f36SVitaly Bukaentry:
247378341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
247478341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2475b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2476b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2477b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmaxs.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2478b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
247978341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
248078341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
248178341f36SVitaly Buka  ret i64 %5
248278341f36SVitaly Buka}
248378341f36SVitaly Buka
2484b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmaxu.b(<1 x i64>, <1 x i64>) nounwind readnone
248578341f36SVitaly Buka
2486354a04c8SVitaly Bukadefine i64 @test28(<1 x i64> %a, <1 x i64> %b) #0 {
2487354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test28(
2488354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2489354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2490354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2491354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2492354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2493354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
2494354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2495354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
2496354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2497dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
2498dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2499dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
2500dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2501dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2502dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmaxu.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2503dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
2504dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
2505354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
2506dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
2507354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2508354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2509354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2510354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
251178341f36SVitaly Buka;
251278341f36SVitaly Bukaentry:
251378341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
251478341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2515b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2516b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2517b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmaxu.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2518b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
251978341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
252078341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
252178341f36SVitaly Buka  ret i64 %5
252278341f36SVitaly Buka}
252378341f36SVitaly Buka
2524b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pavg.w(<1 x i64>, <1 x i64>) nounwind readnone
252578341f36SVitaly Buka
2526354a04c8SVitaly Bukadefine i64 @test27(<1 x i64> %a, <1 x i64> %b) #0 {
2527354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test27(
2528354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2529354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2530354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2531354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2532354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2533354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2534354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2535354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2536354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2537dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2538dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2539dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2540dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2541dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2542dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pavg.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2543dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2544dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2545354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2546dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2547354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2548354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2549354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2550354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
255178341f36SVitaly Buka;
255278341f36SVitaly Bukaentry:
255378341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
255478341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2555b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2556b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2557b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pavg.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2558b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
255978341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
256078341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
256178341f36SVitaly Buka  ret i64 %5
256278341f36SVitaly Buka}
256378341f36SVitaly Buka
2564b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pavg.b(<1 x i64>, <1 x i64>) nounwind readnone
256578341f36SVitaly Buka
2566354a04c8SVitaly Bukadefine i64 @test26(<1 x i64> %a, <1 x i64> %b) #0 {
2567354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test26(
2568354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2569354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2570354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2571354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2572354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2573354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <8 x i8>
2574354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
2575354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
2576354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2577dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP14]] to <1 x i64>
2578dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2579dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
2580dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2581dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2582dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pavg.b(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2583dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
2584dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
2585354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP9]] to <1 x i64>
2586dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
2587354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2588354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2589354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2590354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
259178341f36SVitaly Buka;
259278341f36SVitaly Bukaentry:
259378341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
259478341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
2595b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2596b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2597b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pavg.b(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2598b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
259978341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
260078341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
260178341f36SVitaly Buka  ret i64 %5
260278341f36SVitaly Buka}
260378341f36SVitaly Buka
2604b7e4fba6SJames Y Knightdeclare void @llvm.x86.mmx.movnt.dq(ptr, <1 x i64>) nounwind
260578341f36SVitaly Buka
2606354a04c8SVitaly Bukadefine void @test25(ptr %p, <1 x i64> %a) nounwind optsize ssp #0 {
2607354a04c8SVitaly Buka; CHECK-LABEL: define void @test25(
2608354a04c8SVitaly Buka; CHECK-SAME: ptr [[P:%.*]], <1 x i64> [[A:%.*]]) #[[ATTR3:[0-9]+]] {
2609354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2610354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2611354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
2612354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2613354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP2]], i32 0
2614354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
2615dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
2616dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
2617dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64
2618dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
2619dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
2620dfeb3991SJames Y Knight; CHECK-NEXT:    store <1 x i64> [[TMP3]], ptr [[TMP6]], align 1
2621354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
26228ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1:![0-9]+]]
2623dfeb3991SJames Y Knight; CHECK:       7:
2624354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6:[0-9]+]]
2625354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2626dfeb3991SJames Y Knight; CHECK:       8:
2627dfeb3991SJames Y Knight; CHECK-NEXT:    tail call void @llvm.x86.mmx.movnt.dq(ptr [[P]], <1 x i64> [[MMX_VAR_I]]) #[[ATTR2]]
2628354a04c8SVitaly Buka; CHECK-NEXT:    ret void
262978341f36SVitaly Buka;
263078341f36SVitaly Bukaentry:
263178341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
2632b7e4fba6SJames Y Knight  %mmx_var.i = bitcast i64 %0 to <1 x i64>
2633b7e4fba6SJames Y Knight  tail call void @llvm.x86.mmx.movnt.dq(ptr %p, <1 x i64> %mmx_var.i) nounwind
263478341f36SVitaly Buka  ret void
263578341f36SVitaly Buka}
263678341f36SVitaly Buka
2637b7e4fba6SJames Y Knightdeclare i32 @llvm.x86.mmx.pmovmskb(<1 x i64>) nounwind readnone
263878341f36SVitaly Buka
2639354a04c8SVitaly Bukadefine i32 @test24(<1 x i64> %a) #0 {
2640354a04c8SVitaly Buka; CHECK-LABEL: define i32 @test24(
2641354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
2642354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2643354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2644354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2645354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <1 x i64> [[TMP2]] to <8 x i8>
2646354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
2647dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP6]] to <1 x i64>
2648dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2649dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP4]] to i64
2650354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP3]], 0
26518ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP5:%.*]], label [[TMP7:%.*]], !prof [[PROF1]]
2652dfeb3991SJames Y Knight; CHECK:       5:
2653354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2654354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2655dfeb3991SJames Y Knight; CHECK:       6:
2656dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.mmx.pmovmskb(<1 x i64> [[MMX_VAR_I]]) #[[ATTR2]]
2657354a04c8SVitaly Buka; CHECK-NEXT:    store i32 0, ptr @__msan_retval_tls, align 8
2658354a04c8SVitaly Buka; CHECK-NEXT:    ret i32 [[TMP1]]
265978341f36SVitaly Buka;
266078341f36SVitaly Bukaentry:
266178341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <8 x i8>
2662b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %0 to <1 x i64>
2663b7e4fba6SJames Y Knight  %1 = tail call i32 @llvm.x86.mmx.pmovmskb(<1 x i64> %mmx_var.i) nounwind
266478341f36SVitaly Buka  ret i32 %1
266578341f36SVitaly Buka}
266678341f36SVitaly Buka
2667b7e4fba6SJames Y Knightdeclare void @llvm.x86.mmx.maskmovq(<1 x i64>, <1 x i64>, ptr) nounwind
266878341f36SVitaly Buka
2669354a04c8SVitaly Bukadefine void @test23(<1 x i64> %d, <1 x i64> %n, ptr %p) nounwind optsize ssp #0 {
2670354a04c8SVitaly Buka; CHECK-LABEL: define void @test23(
2671354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[D:%.*]], <1 x i64> [[N:%.*]], ptr [[P:%.*]]) #[[ATTR3]] {
2672354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2673354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2674354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2675354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
2676354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2677354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP4]] to <8 x i8>
2678354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[N]] to <8 x i8>
2679354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP6]] to <8 x i8>
2680354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[D]] to <8 x i8>
2681dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <8 x i8> [[TMP5]] to <1 x i64>
2682dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
2683dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <8 x i8> [[TMP3]] to <1 x i64>
2684dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
2685dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <1 x i64> [[TMP9]] to i64
2686354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP7]], 0
2687dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP10]] to i64
2688354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP1:%.*]] = icmp ne i64 [[TMP8]], 0
2689354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP]], [[_MSCMP1]]
2690354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2691354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSOR3:%.*]] = or i1 [[_MSOR]], [[_MSCMP2]]
26928ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSOR3]], label [[TMP11:%.*]], label [[TMP12:%.*]], !prof [[PROF1]]
2693dfeb3991SJames Y Knight; CHECK:       11:
2694354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2695354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2696dfeb3991SJames Y Knight; CHECK:       12:
2697dfeb3991SJames Y Knight; CHECK-NEXT:    tail call void @llvm.x86.mmx.maskmovq(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]], ptr [[P]]) #[[ATTR2]]
2698354a04c8SVitaly Buka; CHECK-NEXT:    ret void
269978341f36SVitaly Buka;
270078341f36SVitaly Bukaentry:
270178341f36SVitaly Buka  %0 = bitcast <1 x i64> %n to <8 x i8>
270278341f36SVitaly Buka  %1 = bitcast <1 x i64> %d to <8 x i8>
2703b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <8 x i8> %1 to <1 x i64>
2704b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <8 x i8> %0 to <1 x i64>
2705b7e4fba6SJames Y Knight  tail call void @llvm.x86.mmx.maskmovq(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i, ptr %p) nounwind
270678341f36SVitaly Buka  ret void
270778341f36SVitaly Buka}
270878341f36SVitaly Buka
2709b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmulhu.w(<1 x i64>, <1 x i64>) nounwind readnone
271078341f36SVitaly Buka
2711354a04c8SVitaly Bukadefine i64 @test22(<1 x i64> %a, <1 x i64> %b) #0 {
2712354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test22(
2713354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2714354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2715354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2716354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2717354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2718354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP8]] to <4 x i16>
2719354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
2720354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
2721354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2722dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP14]] to <1 x i64>
2723dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
2724dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
2725dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2726dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2727dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP15:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmulhu.w(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2728dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
2729dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP15]] to <4 x i16>
2730354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP9]] to <1 x i64>
2731dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <4 x i16> [[TMP16]] to <1 x i64>
2732354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2733354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <1 x i64> [[TMP12]], i32 0
2734354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
2735354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP13]]
273678341f36SVitaly Buka;
273778341f36SVitaly Bukaentry:
273878341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
273978341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
2740b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <4 x i16> %1 to <1 x i64>
2741b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <4 x i16> %0 to <1 x i64>
2742b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmulhu.w(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2743b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
274478341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
274578341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
274678341f36SVitaly Buka  ret i64 %5
274778341f36SVitaly Buka}
274878341f36SVitaly Buka
2749b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64>, i8) nounwind readnone
275078341f36SVitaly Buka
2751354a04c8SVitaly Bukadefine i64 @test21(<1 x i64> %a) #0 {
2752354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test21(
2753354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
2754354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2755354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2756354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2757354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
2758354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2759dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
2760dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2761dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP10]] to i64
2762354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP9]], 0
27638ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP12:%.*]], !prof [[PROF1]]
2764dfeb3991SJames Y Knight; CHECK:       6:
2765354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2766354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2767dfeb3991SJames Y Knight; CHECK:       7:
2768dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = tail call <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64> [[TMP11]], i8 3) #[[ATTR5]]
2769dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP13]] to <4 x i16>
2770354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP3]] to <1 x i64>
2771354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
2772354a04c8SVitaly Buka; CHECK-NEXT:    store i64 0, ptr @__msan_retval_tls, align 8
2773354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP5]]
277478341f36SVitaly Buka;
277578341f36SVitaly Bukaentry:
277678341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
2777b7e4fba6SJames Y Knight  %1 = bitcast <4 x i16> %0 to <1 x i64>
2778b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64> %1, i8 3) nounwind readnone
2779b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
278078341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
278178341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
278278341f36SVitaly Buka  ret i64 %5
278378341f36SVitaly Buka}
278478341f36SVitaly Buka
2785354a04c8SVitaly Bukadefine i32 @test21_2(<1 x i64> %a) #0 {
2786354a04c8SVitaly Buka; CHECK-LABEL: define i32 @test21_2(
2787354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
2788354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2789354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2790354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2791354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
2792354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
2793dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
2794dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
2795dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP10]] to i64
2796354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP9]], 0
27978ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP12:%.*]], !prof [[PROF1]]
2798dfeb3991SJames Y Knight; CHECK:       6:
2799354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2800354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2801dfeb3991SJames Y Knight; CHECK:       7:
2802dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = tail call <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64> [[TMP11]], i8 3) #[[ATTR5]]
2803dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP13]] to <4 x i16>
2804354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP3]] to <2 x i32>
2805354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <2 x i32> [[TMP4]], i32 0
2806354a04c8SVitaly Buka; CHECK-NEXT:    store i32 0, ptr @__msan_retval_tls, align 8
2807354a04c8SVitaly Buka; CHECK-NEXT:    ret i32 [[TMP5]]
280878341f36SVitaly Buka;
280978341f36SVitaly Bukaentry:
281078341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
2811b7e4fba6SJames Y Knight  %1 = bitcast <4 x i16> %0 to <1 x i64>
2812b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64> %1, i8 3) nounwind readnone
2813b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
281478341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <2 x i32>
281578341f36SVitaly Buka  %5 = extractelement <2 x i32> %4, i32 0
281678341f36SVitaly Buka  ret i32 %5
281778341f36SVitaly Buka}
281878341f36SVitaly Buka
2819b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pmulu.dq(<1 x i64>, <1 x i64>) nounwind readnone
282078341f36SVitaly Buka
2821354a04c8SVitaly Bukadefine i64 @test20(<1 x i64> %a, <1 x i64> %b) #0 {
2822354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test20(
2823354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2824354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2825354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2826354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2827354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2828354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <1 x i64> [[TMP5]] to <2 x i32>
2829354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
2830354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
2831354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
2832dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP4]] to <1 x i64>
2833dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR_I:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
2834dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <2 x i32> [[TMP9]] to <1 x i64>
2835dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1_I:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
2836dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <1 x i64> [[TMP6]], [[TMP7]]
2837dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pmulu.dq(<1 x i64> [[MMX_VAR_I]], <1 x i64> [[MMX_VAR1_I]]) #[[ATTR2]]
2838dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = bitcast <1 x i64> [[_MSPROP1]] to i64
2839dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP10]] to i64
2840354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
2841354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
284278341f36SVitaly Buka;
284378341f36SVitaly Bukaentry:
284478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
284578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
2846b7e4fba6SJames Y Knight  %mmx_var.i = bitcast <2 x i32> %1 to <1 x i64>
2847b7e4fba6SJames Y Knight  %mmx_var1.i = bitcast <2 x i32> %0 to <1 x i64>
2848b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.pmulu.dq(<1 x i64> %mmx_var.i, <1 x i64> %mmx_var1.i) nounwind
2849b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
285078341f36SVitaly Buka  ret i64 %3
285178341f36SVitaly Buka}
285278341f36SVitaly Buka
2853b7e4fba6SJames Y Knightdeclare <2 x double> @llvm.x86.sse.cvtpi2pd(<1 x i64>) nounwind readnone
285478341f36SVitaly Buka
2855354a04c8SVitaly Bukadefine <2 x double> @test19(<1 x i64> %a) #0 {
2856354a04c8SVitaly Buka; CHECK-LABEL: define <2 x double> @test19(
2857354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
2858354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2859354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2860354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2861354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <1 x i64> [[TMP4]] to <2 x i32>
2862354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
2863dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i32> [[TMP7]] to <1 x i64>
2864dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
2865dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP5]] to i64
2866354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP3]], 0
28678ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
2868dfeb3991SJames Y Knight; CHECK:       6:
2869354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2870354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2871dfeb3991SJames Y Knight; CHECK:       7:
2872dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = tail call <2 x double> @llvm.x86.sse.cvtpi2pd(<1 x i64> [[TMP8]]) #[[ATTR5]]
2873354a04c8SVitaly Buka; CHECK-NEXT:    store <2 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
2874354a04c8SVitaly Buka; CHECK-NEXT:    ret <2 x double> [[TMP2]]
287578341f36SVitaly Buka;
287678341f36SVitaly Bukaentry:
287778341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
2878b7e4fba6SJames Y Knight  %1 = bitcast <2 x i32> %0 to <1 x i64>
2879b7e4fba6SJames Y Knight  %2 = tail call <2 x double> @llvm.x86.sse.cvtpi2pd(<1 x i64> %1) nounwind readnone
288078341f36SVitaly Buka  ret <2 x double> %2
288178341f36SVitaly Buka}
288278341f36SVitaly Buka
2883b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.sse.cvttpd2pi(<2 x double>) nounwind readnone
288478341f36SVitaly Buka
2885354a04c8SVitaly Bukadefine i64 @test18(<2 x double> %a) #0 {
2886354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test18(
2887354a04c8SVitaly Buka; CHECK-SAME: <2 x double> [[A:%.*]]) #[[ATTR1]] {
2888354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2889354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
2890354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2891354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i64> [[TMP4]] to i128
2892354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i128 [[TMP5]], 0
28938ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP7:%.*]], !prof [[PROF1]]
2894354a04c8SVitaly Buka; CHECK:       2:
2895354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2896354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2897354a04c8SVitaly Buka; CHECK:       3:
2898dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = tail call <1 x i64> @llvm.x86.sse.cvttpd2pi(<2 x double> [[A]]) #[[ATTR5]]
2899dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
2900354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
2901354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <1 x i64> [[TMP2]], i32 0
2902354a04c8SVitaly Buka; CHECK-NEXT:    store i64 0, ptr @__msan_retval_tls, align 8
2903354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
290478341f36SVitaly Buka;
290578341f36SVitaly Bukaentry:
2906b7e4fba6SJames Y Knight  %0 = tail call <1 x i64> @llvm.x86.sse.cvttpd2pi(<2 x double> %a) nounwind readnone
2907b7e4fba6SJames Y Knight  %1 = bitcast <1 x i64> %0 to <2 x i32>
290878341f36SVitaly Buka  %2 = bitcast <2 x i32> %1 to <1 x i64>
290978341f36SVitaly Buka  %3 = extractelement <1 x i64> %2, i32 0
291078341f36SVitaly Buka  ret i64 %3
291178341f36SVitaly Buka}
291278341f36SVitaly Buka
2913b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.sse.cvtpd2pi(<2 x double>) nounwind readnone
291478341f36SVitaly Buka
2915354a04c8SVitaly Bukadefine i64 @test17(<2 x double> %a) #0 {
2916354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test17(
2917354a04c8SVitaly Buka; CHECK-SAME: <2 x double> [[A:%.*]]) #[[ATTR1]] {
2918354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2919354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
2920354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2921354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <2 x i64> [[TMP4]] to i128
2922354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i128 [[TMP5]], 0
29238ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP7:%.*]], !prof [[PROF1]]
2924354a04c8SVitaly Buka; CHECK:       2:
2925354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2926354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2927354a04c8SVitaly Buka; CHECK:       3:
2928dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = tail call <1 x i64> @llvm.x86.sse.cvtpd2pi(<2 x double> [[A]]) #[[ATTR5]]
2929dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[TMP8]] to <2 x i32>
2930354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
2931354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <1 x i64> [[TMP2]], i32 0
2932354a04c8SVitaly Buka; CHECK-NEXT:    store i64 0, ptr @__msan_retval_tls, align 8
2933354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
293478341f36SVitaly Buka;
293578341f36SVitaly Bukaentry:
2936b7e4fba6SJames Y Knight  %0 = tail call <1 x i64> @llvm.x86.sse.cvtpd2pi(<2 x double> %a) nounwind readnone
2937b7e4fba6SJames Y Knight  %1 = bitcast <1 x i64> %0 to <2 x i32>
293878341f36SVitaly Buka  %2 = bitcast <2 x i32> %1 to <1 x i64>
293978341f36SVitaly Buka  %3 = extractelement <1 x i64> %2, i32 0
294078341f36SVitaly Buka  ret i64 %3
294178341f36SVitaly Buka}
294278341f36SVitaly Buka
2943b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.palignr.b(<1 x i64>, <1 x i64>, i8) nounwind readnone
294478341f36SVitaly Buka
2945354a04c8SVitaly Bukadefine i64 @test16(<1 x i64> %a, <1 x i64> %b) #0 {
2946354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test16(
2947354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
2948354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2949354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2950354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2951354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2952354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
2953354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <1 x i64> [[A]], i32 0
2954dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = bitcast i64 [[_MSPROP]] to <1 x i64>
2955dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR:%.*]] = bitcast i64 [[TMP0]] to <1 x i64>
2956354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP7]], i32 0
2957354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i64> [[B]], i32 0
2958dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast i64 [[_MSPROP1]] to <1 x i64>
2959dfeb3991SJames Y Knight; CHECK-NEXT:    [[MMX_VAR1:%.*]] = bitcast i64 [[TMP1]] to <1 x i64>
2960dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP4]] to i64
2961dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP11]], 0
2962dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP5]] to i64
2963dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP12]], 0
2964354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP]], [[_MSCMP2]]
29658ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
2966dfeb3991SJames Y Knight; CHECK:       8:
2967354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
2968354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
2969dfeb3991SJames Y Knight; CHECK:       9:
2970dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = tail call <1 x i64> @llvm.x86.mmx.palignr.b(<1 x i64> [[MMX_VAR]], <1 x i64> [[MMX_VAR1]], i8 16)
2971dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <1 x i64> [[TMP10]] to i64
2972354a04c8SVitaly Buka; CHECK-NEXT:    store i64 0, ptr @__msan_retval_tls, align 8
2973354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP3]]
297478341f36SVitaly Buka;
297578341f36SVitaly Bukaentry:
297678341f36SVitaly Buka  %0 = extractelement <1 x i64> %a, i32 0
2977b7e4fba6SJames Y Knight  %mmx_var = bitcast i64 %0 to <1 x i64>
297878341f36SVitaly Buka  %1 = extractelement <1 x i64> %b, i32 0
2979b7e4fba6SJames Y Knight  %mmx_var1 = bitcast i64 %1 to <1 x i64>
2980b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.mmx.palignr.b(<1 x i64> %mmx_var, <1 x i64> %mmx_var1, i8 16)
2981b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to i64
298278341f36SVitaly Buka  ret i64 %3
298378341f36SVitaly Buka}
298478341f36SVitaly Buka
2985b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.pabs.d(<1 x i64>) nounwind readnone
298678341f36SVitaly Buka
2987354a04c8SVitaly Bukadefine i64 @test15(<1 x i64> %a) #0 {
2988354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test15(
2989354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
2990354a04c8SVitaly Buka; CHECK-NEXT:  entry:
2991354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
2992354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
2993354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <2 x i32>
2994354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
2995dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <2 x i32> [[TMP8]] to <1 x i64>
2996dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
2997dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.pabs.d(<1 x i64> [[TMP1]]) #[[ATTR5]]
2998dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <1 x i64> [[TMP11]] to <2 x i32>
2999dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP12]] to <2 x i32>
3000354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <2 x i32> [[TMP6]] to <1 x i64>
3001dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <2 x i32> [[TMP13]] to <1 x i64>
3002354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
3003354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <1 x i64> [[TMP9]], i32 0
3004354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
3005354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP10]]
300678341f36SVitaly Buka;
300778341f36SVitaly Bukaentry:
300878341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <2 x i32>
3009b7e4fba6SJames Y Knight  %1 = bitcast <2 x i32> %0 to <1 x i64>
3010b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.ssse3.pabs.d(<1 x i64> %1) nounwind readnone
3011b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <2 x i32>
301278341f36SVitaly Buka  %4 = bitcast <2 x i32> %3 to <1 x i64>
301378341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
301478341f36SVitaly Buka  ret i64 %5
301578341f36SVitaly Buka}
301678341f36SVitaly Buka
3017b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.pabs.w(<1 x i64>) nounwind readnone
301878341f36SVitaly Buka
3019354a04c8SVitaly Bukadefine i64 @test14(<1 x i64> %a) #0 {
3020354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test14(
3021354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
3022354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3023354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3024354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3025354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <4 x i16>
3026354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
3027dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <4 x i16> [[TMP8]] to <1 x i64>
3028dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
3029dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.pabs.w(<1 x i64> [[TMP1]]) #[[ATTR5]]
3030dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <1 x i64> [[TMP11]] to <4 x i16>
3031dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP12]] to <4 x i16>
3032354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <4 x i16> [[TMP6]] to <1 x i64>
3033dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3034354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
3035354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <1 x i64> [[TMP9]], i32 0
3036354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
3037354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP10]]
303878341f36SVitaly Buka;
303978341f36SVitaly Bukaentry:
304078341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <4 x i16>
3041b7e4fba6SJames Y Knight  %1 = bitcast <4 x i16> %0 to <1 x i64>
3042b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.ssse3.pabs.w(<1 x i64> %1) nounwind readnone
3043b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <4 x i16>
304478341f36SVitaly Buka  %4 = bitcast <4 x i16> %3 to <1 x i64>
304578341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
304678341f36SVitaly Buka  ret i64 %5
304778341f36SVitaly Buka}
304878341f36SVitaly Buka
3049b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.pabs.b(<1 x i64>) nounwind readnone
305078341f36SVitaly Buka
3051354a04c8SVitaly Bukadefine i64 @test13(<1 x i64> %a) #0 {
3052354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test13(
3053354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]]) #[[ATTR1]] {
3054354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3055354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3056354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3057354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <1 x i64> [[TMP7]] to <8 x i8>
3058354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
3059dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <8 x i8> [[TMP8]] to <1 x i64>
3060dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
3061dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP12:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.pabs.b(<1 x i64> [[TMP1]]) #[[ATTR5]]
3062dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <1 x i64> [[TMP11]] to <8 x i8>
3063dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP12]] to <8 x i8>
3064354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = bitcast <8 x i8> [[TMP6]] to <1 x i64>
3065dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <8 x i8> [[TMP13]] to <1 x i64>
3066354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <1 x i64> [[TMP4]], i32 0
3067354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <1 x i64> [[TMP9]], i32 0
3068354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP5]], ptr @__msan_retval_tls, align 8
3069354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP10]]
307078341f36SVitaly Buka;
307178341f36SVitaly Bukaentry:
307278341f36SVitaly Buka  %0 = bitcast <1 x i64> %a to <8 x i8>
3073b7e4fba6SJames Y Knight  %1 = bitcast <8 x i8> %0 to <1 x i64>
3074b7e4fba6SJames Y Knight  %2 = tail call <1 x i64> @llvm.x86.ssse3.pabs.b(<1 x i64> %1) nounwind readnone
3075b7e4fba6SJames Y Knight  %3 = bitcast <1 x i64> %2 to <8 x i8>
307678341f36SVitaly Buka  %4 = bitcast <8 x i8> %3 to <1 x i64>
307778341f36SVitaly Buka  %5 = extractelement <1 x i64> %4, i32 0
307878341f36SVitaly Buka  ret i64 %5
307978341f36SVitaly Buka}
308078341f36SVitaly Buka
3081b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.psign.d(<1 x i64>, <1 x i64>) nounwind readnone
308278341f36SVitaly Buka
3083354a04c8SVitaly Bukadefine i64 @test12(<1 x i64> %a, <1 x i64> %b) #0 {
3084354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test12(
3085354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3086354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3087354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3088354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3089354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3090354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
3091354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
3092354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
3093354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
3094dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <2 x i32> [[TMP13]] to <1 x i64>
3095dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
3096dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <2 x i32> [[TMP12]] to <1 x i64>
3097dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
3098dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP16]], [[TMP8]]
3099dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.psign.d(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3100dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
3101dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <2 x i32>
3102354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
3103dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i32> [[TMP19]] to <1 x i64>
3104354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3105354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3106354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3107354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
310878341f36SVitaly Buka;
310978341f36SVitaly Bukaentry:
311078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
311178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
3112b7e4fba6SJames Y Knight  %2 = bitcast <2 x i32> %1 to <1 x i64>
3113b7e4fba6SJames Y Knight  %3 = bitcast <2 x i32> %0 to <1 x i64>
3114b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.psign.d(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3115b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <2 x i32>
311678341f36SVitaly Buka  %6 = bitcast <2 x i32> %5 to <1 x i64>
311778341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
311878341f36SVitaly Buka  ret i64 %7
311978341f36SVitaly Buka}
312078341f36SVitaly Buka
3121b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.psign.w(<1 x i64>, <1 x i64>) nounwind readnone
312278341f36SVitaly Buka
3123354a04c8SVitaly Bukadefine i64 @test11(<1 x i64> %a, <1 x i64> %b) #0 {
3124354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test11(
3125354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3126354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3127354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3128354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3129354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3130354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
3131354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
3132354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
3133354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
3134dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3135dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
3136dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i16> [[TMP12]] to <1 x i64>
3137dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
3138dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP16]], [[TMP8]]
3139dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.psign.w(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3140dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
3141dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <4 x i16>
3142354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
3143dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
3144354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3145354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3146354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3147354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
314878341f36SVitaly Buka;
314978341f36SVitaly Bukaentry:
315078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
315178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
3152b7e4fba6SJames Y Knight  %2 = bitcast <4 x i16> %1 to <1 x i64>
3153b7e4fba6SJames Y Knight  %3 = bitcast <4 x i16> %0 to <1 x i64>
3154b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.psign.w(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3155b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <4 x i16>
315678341f36SVitaly Buka  %6 = bitcast <4 x i16> %5 to <1 x i64>
315778341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
315878341f36SVitaly Buka  ret i64 %7
315978341f36SVitaly Buka}
316078341f36SVitaly Buka
3161b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.psign.b(<1 x i64>, <1 x i64>) nounwind readnone
316278341f36SVitaly Buka
3163354a04c8SVitaly Bukadefine i64 @test10(<1 x i64> %a, <1 x i64> %b) #0 {
3164354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test10(
3165354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3166354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3167354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3168354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3169354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3170354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <8 x i8>
3171354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
3172354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
3173354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
3174dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <8 x i8> [[TMP13]] to <1 x i64>
3175dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
3176dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP12]] to <1 x i64>
3177dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
3178dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP16]], [[TMP8]]
3179dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.psign.b(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3180dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
3181dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <8 x i8>
3182354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
3183dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <8 x i8> [[TMP19]] to <1 x i64>
3184354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3185354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3186354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3187354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
318878341f36SVitaly Buka;
318978341f36SVitaly Bukaentry:
319078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
319178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
3192b7e4fba6SJames Y Knight  %2 = bitcast <8 x i8> %1 to <1 x i64>
3193b7e4fba6SJames Y Knight  %3 = bitcast <8 x i8> %0 to <1 x i64>
3194b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.psign.b(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3195b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <8 x i8>
319678341f36SVitaly Buka  %6 = bitcast <8 x i8> %5 to <1 x i64>
319778341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
319878341f36SVitaly Buka  ret i64 %7
319978341f36SVitaly Buka}
320078341f36SVitaly Buka
3201b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.pshuf.b(<1 x i64>, <1 x i64>) nounwind readnone
320278341f36SVitaly Buka
3203354a04c8SVitaly Bukadefine i64 @test9(<1 x i64> %a, <1 x i64> %b) #0 {
3204354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test9(
3205354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3206354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3207354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3208354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3209354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3210354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <8 x i8>
3211354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
3212354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <8 x i8>
3213354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
3214dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <8 x i8> [[TMP13]] to <1 x i64>
3215dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
3216dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP12]] to <1 x i64>
3217dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
3218dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP16]], [[TMP8]]
3219dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.pshuf.b(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3220dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <8 x i8>
3221dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <8 x i8>
3222354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP11]] to <1 x i64>
3223dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <8 x i8> [[TMP19]] to <1 x i64>
3224354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3225354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3226354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3227354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
322878341f36SVitaly Buka;
322978341f36SVitaly Bukaentry:
323078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
323178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
3232b7e4fba6SJames Y Knight  %2 = bitcast <8 x i8> %1 to <1 x i64>
3233b7e4fba6SJames Y Knight  %3 = bitcast <8 x i8> %0 to <1 x i64>
3234b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.pshuf.b(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3235b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <8 x i8>
323678341f36SVitaly Buka  %6 = bitcast <8 x i8> %5 to <1 x i64>
323778341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
323878341f36SVitaly Buka  ret i64 %7
323978341f36SVitaly Buka}
324078341f36SVitaly Buka
3241b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.pmul.hr.sw(<1 x i64>, <1 x i64>) nounwind readnone
324278341f36SVitaly Buka
3243354a04c8SVitaly Bukadefine i64 @test8(<1 x i64> %a, <1 x i64> %b) #0 {
3244354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test8(
3245354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3246354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3247354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3248354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3249354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3250354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
3251354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
3252354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
3253354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
3254dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3255dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
3256dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i16> [[TMP12]] to <1 x i64>
3257dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
3258dfeb3991SJames Y Knight; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP16]], [[TMP8]]
3259dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.pmul.hr.sw(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3260dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
3261dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <4 x i16>
3262354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
3263dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
3264354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3265354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3266354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3267354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
326878341f36SVitaly Buka;
326978341f36SVitaly Bukaentry:
327078341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
327178341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
3272b7e4fba6SJames Y Knight  %2 = bitcast <4 x i16> %1 to <1 x i64>
3273b7e4fba6SJames Y Knight  %3 = bitcast <4 x i16> %0 to <1 x i64>
3274b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.pmul.hr.sw(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3275b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <4 x i16>
327678341f36SVitaly Buka  %6 = bitcast <4 x i16> %5 to <1 x i64>
327778341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
327878341f36SVitaly Buka  ret i64 %7
327978341f36SVitaly Buka}
328078341f36SVitaly Buka
3281b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.pmadd.ub.sw(<1 x i64>, <1 x i64>) nounwind readnone
328278341f36SVitaly Buka
3283354a04c8SVitaly Bukadefine i64 @test7(<1 x i64> %a, <1 x i64> %b) #0 {
3284354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test7(
3285354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3286354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3287354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3288354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3289354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3290354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <1 x i64> [[TMP9]] to <8 x i8>
3291354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <8 x i8>
3292354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP18:%.*]] = bitcast <1 x i64> [[TMP15]] to <8 x i8>
3293354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <8 x i8>
3294dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP21:%.*]] = bitcast <8 x i8> [[TMP18]] to <1 x i64>
3295dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP22:%.*]] = bitcast <8 x i8> [[TMP1]] to <1 x i64>
3296dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <8 x i8> [[TMP17]] to <1 x i64>
3297dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP23:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64>
3298dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP10:%.*]] = or <1 x i64> [[TMP21]], [[TMP8]]
3299dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
3300354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = icmp ne <4 x i16> [[TMP11]], zeroinitializer
3301354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = sext <4 x i1> [[TMP12]] to <4 x i16>
3302dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3303dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP24:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.pmadd.ub.sw(<1 x i64> [[TMP22]], <1 x i64> [[TMP23]]) #[[ATTR5]]
3304dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[TMP14]] to <8 x i8>
3305dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP24]] to <8 x i8>
3306354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <8 x i8> [[TMP16]] to <1 x i64>
3307354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <8 x i8> [[TMP5]] to <1 x i64>
3308354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3309354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <1 x i64> [[TMP19]], i32 0
3310354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3311354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP20]]
331278341f36SVitaly Buka;
331378341f36SVitaly Bukaentry:
331478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <8 x i8>
331578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <8 x i8>
3316b7e4fba6SJames Y Knight  %2 = bitcast <8 x i8> %1 to <1 x i64>
3317b7e4fba6SJames Y Knight  %3 = bitcast <8 x i8> %0 to <1 x i64>
3318b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.pmadd.ub.sw(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3319b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <8 x i8>
332078341f36SVitaly Buka  %6 = bitcast <8 x i8> %5 to <1 x i64>
332178341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
332278341f36SVitaly Buka  ret i64 %7
332378341f36SVitaly Buka}
332478341f36SVitaly Buka
3325b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.phsub.sw(<1 x i64>, <1 x i64>) nounwind readnone
332678341f36SVitaly Buka
3327354a04c8SVitaly Bukadefine i64 @test6(<1 x i64> %a, <1 x i64> %b) #0 {
3328354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test6(
3329354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3330354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3331354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3332354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3333354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3334354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
3335354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
3336354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
3337354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
3338dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3339dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
3340dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i16> [[TMP12]] to <1 x i64>
3341dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
3342*4a426079SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = call <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64> [[TMP16]], <1 x i64> [[TMP8]])
3343dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.phsub.sw(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3344dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
3345dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <4 x i16>
3346354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
3347dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
3348354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3349354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3350354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3351354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
335278341f36SVitaly Buka;
335378341f36SVitaly Bukaentry:
335478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
335578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
3356b7e4fba6SJames Y Knight  %2 = bitcast <4 x i16> %1 to <1 x i64>
3357b7e4fba6SJames Y Knight  %3 = bitcast <4 x i16> %0 to <1 x i64>
3358b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.phsub.sw(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3359b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <4 x i16>
336078341f36SVitaly Buka  %6 = bitcast <4 x i16> %5 to <1 x i64>
336178341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
336278341f36SVitaly Buka  ret i64 %7
336378341f36SVitaly Buka}
336478341f36SVitaly Buka
3365b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.phsub.d(<1 x i64>, <1 x i64>) nounwind readnone
336678341f36SVitaly Buka
3367354a04c8SVitaly Bukadefine i64 @test5(<1 x i64> %a, <1 x i64> %b) #0 {
3368354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test5(
3369354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3370354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3371354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3372354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3373354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3374354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
3375354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
3376354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
3377354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
3378dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <2 x i32> [[TMP13]] to <1 x i64>
3379dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
3380dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <2 x i32> [[TMP12]] to <1 x i64>
3381dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
3382*4a426079SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = call <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64> [[TMP16]], <1 x i64> [[TMP8]])
3383dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.phsub.d(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3384dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
3385dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <2 x i32>
3386354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
3387dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i32> [[TMP19]] to <1 x i64>
3388354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3389354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3390354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3391354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
339278341f36SVitaly Buka;
339378341f36SVitaly Bukaentry:
339478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
339578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
3396b7e4fba6SJames Y Knight  %2 = bitcast <2 x i32> %1 to <1 x i64>
3397b7e4fba6SJames Y Knight  %3 = bitcast <2 x i32> %0 to <1 x i64>
3398b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.phsub.d(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3399b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <2 x i32>
340078341f36SVitaly Buka  %6 = bitcast <2 x i32> %5 to <1 x i64>
340178341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
340278341f36SVitaly Buka  ret i64 %7
340378341f36SVitaly Buka}
340478341f36SVitaly Buka
3405b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.phsub.w(<1 x i64>, <1 x i64>) nounwind readnone
340678341f36SVitaly Buka
3407354a04c8SVitaly Bukadefine i64 @test4(<1 x i64> %a, <1 x i64> %b) #0 {
3408354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test4(
3409354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3410354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3411354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3412354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3413354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3414354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
3415354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
3416354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
3417354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
3418dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3419dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
3420dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i16> [[TMP12]] to <1 x i64>
3421dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
3422*4a426079SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = call <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64> [[TMP16]], <1 x i64> [[TMP8]])
3423dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.phsub.w(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3424dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
3425dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <4 x i16>
3426354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
3427dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
3428354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3429354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3430354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3431354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
343278341f36SVitaly Buka;
343378341f36SVitaly Bukaentry:
343478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
343578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
3436b7e4fba6SJames Y Knight  %2 = bitcast <4 x i16> %1 to <1 x i64>
3437b7e4fba6SJames Y Knight  %3 = bitcast <4 x i16> %0 to <1 x i64>
3438b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.phsub.w(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3439b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <4 x i16>
344078341f36SVitaly Buka  %6 = bitcast <4 x i16> %5 to <1 x i64>
344178341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
344278341f36SVitaly Buka  ret i64 %7
344378341f36SVitaly Buka}
344478341f36SVitaly Buka
3445b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64>, <1 x i64>) nounwind readnone
344678341f36SVitaly Buka
3447354a04c8SVitaly Bukadefine i64 @test3(<1 x i64> %a, <1 x i64> %b) #0 {
3448354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test3(
3449354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3450354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3451354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3452354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3453354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3454354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <4 x i16>
3455354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <4 x i16>
3456354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <4 x i16>
3457354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <4 x i16>
3458dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <4 x i16> [[TMP13]] to <1 x i64>
3459dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <1 x i64>
3460dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i16> [[TMP12]] to <1 x i64>
3461dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <4 x i16> [[TMP0]] to <1 x i64>
34628ef171eeSThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = call <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64> [[TMP16]], <1 x i64> [[TMP8]])
3463dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3464dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <4 x i16>
3465dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <4 x i16>
3466354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i16> [[TMP11]] to <1 x i64>
3467dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[TMP19]] to <1 x i64>
3468354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3469354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3470354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3471354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
347278341f36SVitaly Buka;
347378341f36SVitaly Bukaentry:
347478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <4 x i16>
347578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <4 x i16>
3476b7e4fba6SJames Y Knight  %2 = bitcast <4 x i16> %1 to <1 x i64>
3477b7e4fba6SJames Y Knight  %3 = bitcast <4 x i16> %0 to <1 x i64>
3478b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3479b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <4 x i16>
348078341f36SVitaly Buka  %6 = bitcast <4 x i16> %5 to <1 x i64>
348178341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
348278341f36SVitaly Buka  ret i64 %7
348378341f36SVitaly Buka}
348478341f36SVitaly Buka
3485b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64>, <1 x i64>) nounwind readnone
348678341f36SVitaly Buka
3487354a04c8SVitaly Bukadefine i64 @test2(<1 x i64> %a, <1 x i64> %b) #0 {
3488354a04c8SVitaly Buka; CHECK-LABEL: define i64 @test2(
3489354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR1]] {
3490354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3491354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3492354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3493354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3494354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = bitcast <1 x i64> [[TMP9]] to <2 x i32>
3495354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <1 x i64> [[B]] to <2 x i32>
3496354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[TMP10]] to <2 x i32>
3497354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <1 x i64> [[A]] to <2 x i32>
3498dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <2 x i32> [[TMP13]] to <1 x i64>
3499dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <2 x i32> [[TMP1]] to <1 x i64>
3500dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <2 x i32> [[TMP12]] to <1 x i64>
3501dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP17:%.*]] = bitcast <2 x i32> [[TMP0]] to <1 x i64>
35028ef171eeSThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = call <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64> [[TMP16]], <1 x i64> [[TMP8]])
3503dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP18:%.*]] = tail call <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64> [[TMP2]], <1 x i64> [[TMP17]]) #[[ATTR5]]
3504dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP11:%.*]] = bitcast <1 x i64> [[_MSPROP]] to <2 x i32>
3505dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP19:%.*]] = bitcast <1 x i64> [[TMP18]] to <2 x i32>
3506354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <2 x i32> [[TMP11]] to <1 x i64>
3507dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i32> [[TMP19]] to <1 x i64>
3508354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <1 x i64> [[TMP6]], i32 0
3509354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <1 x i64> [[TMP14]], i32 0
3510354a04c8SVitaly Buka; CHECK-NEXT:    store i64 [[TMP7]], ptr @__msan_retval_tls, align 8
3511354a04c8SVitaly Buka; CHECK-NEXT:    ret i64 [[TMP15]]
351278341f36SVitaly Buka;
351378341f36SVitaly Bukaentry:
351478341f36SVitaly Buka  %0 = bitcast <1 x i64> %b to <2 x i32>
351578341f36SVitaly Buka  %1 = bitcast <1 x i64> %a to <2 x i32>
3516b7e4fba6SJames Y Knight  %2 = bitcast <2 x i32> %1 to <1 x i64>
3517b7e4fba6SJames Y Knight  %3 = bitcast <2 x i32> %0 to <1 x i64>
3518b7e4fba6SJames Y Knight  %4 = tail call <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64> %2, <1 x i64> %3) nounwind readnone
3519b7e4fba6SJames Y Knight  %5 = bitcast <1 x i64> %4 to <2 x i32>
352078341f36SVitaly Buka  %6 = bitcast <2 x i32> %5 to <1 x i64>
352178341f36SVitaly Buka  %7 = extractelement <1 x i64> %6, i32 0
352278341f36SVitaly Buka  ret i64 %7
352378341f36SVitaly Buka}
352478341f36SVitaly Buka
3525b7e4fba6SJames Y Knightdefine <4 x float> @test89(<4 x float> %a, <1 x i64> %b) nounwind #0 {
352678341f36SVitaly Buka; ALL-LABEL: test89:
352778341f36SVitaly Buka; ALL:       # %bb.0:
352878341f36SVitaly Buka; ALL-NEXT:    cvtpi2ps %mm0, %xmm0
352978341f36SVitaly Buka; ALL-NEXT:    ret{{[l|q]}}
3530354a04c8SVitaly Buka; CHECK-LABEL: define <4 x float> @test89(
3531dfeb3991SJames Y Knight; CHECK-SAME: <4 x float> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR4:[0-9]+]] {
3532354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
3533dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
3534354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3535354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = bitcast <4 x i32> [[TMP1]] to i128
3536354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i128 [[TMP3]], 0
3537dfeb3991SJames Y Knight; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <1 x i64> [[TMP4]] to i64
3538354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP1:%.*]] = icmp ne i64 [[TMP2]], 0
3539354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP]], [[_MSCMP1]]
35408ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP5:%.*]], label [[TMP6:%.*]], !prof [[PROF1]]
3541dfeb3991SJames Y Knight; CHECK:       5:
3542354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
3543354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
3544dfeb3991SJames Y Knight; CHECK:       6:
3545dfeb3991SJames Y Knight; CHECK-NEXT:    [[C:%.*]] = tail call <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float> [[A]], <1 x i64> [[B]])
3546354a04c8SVitaly Buka; CHECK-NEXT:    store <4 x i32> zeroinitializer, ptr @__msan_retval_tls, align 8
3547354a04c8SVitaly Buka; CHECK-NEXT:    ret <4 x float> [[C]]
3548354a04c8SVitaly Buka;
3549b7e4fba6SJames Y Knight  %c = tail call <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float> %a, <1 x i64> %b)
355078341f36SVitaly Buka  ret <4 x float> %c
355178341f36SVitaly Buka}
355278341f36SVitaly Buka
3553b7e4fba6SJames Y Knightdeclare <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float>, <1 x i64>) nounwind readnone
355478341f36SVitaly Buka
3555354a04c8SVitaly Bukadefine void @test90() #0 {
355678341f36SVitaly Buka; ALL-LABEL: test90:
355778341f36SVitaly Buka; ALL:       # %bb.0:
355878341f36SVitaly Buka; ALL-NEXT:    emms
355978341f36SVitaly Buka; ALL-NEXT:    ret{{[l|q]}}
3560354a04c8SVitaly Buka; CHECK-LABEL: define void @test90(
3561354a04c8SVitaly Buka; CHECK-SAME: ) #[[ATTR1]] {
3562354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3563354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.x86.mmx.emms()
3564354a04c8SVitaly Buka; CHECK-NEXT:    ret void
3565354a04c8SVitaly Buka;
356678341f36SVitaly Buka  call void @llvm.x86.mmx.emms()
356778341f36SVitaly Buka  ret void
356878341f36SVitaly Buka}
356978341f36SVitaly Buka
357078341f36SVitaly Bukadeclare void @llvm.x86.mmx.emms()
357178341f36SVitaly Buka
3572354a04c8SVitaly Bukadefine <1 x i64> @test_mm_insert_pi16(<1 x i64> %a.coerce, i32 %d) nounwind #0 {
3573354a04c8SVitaly Buka; CHECK-LABEL: define <1 x i64> @test_mm_insert_pi16(
3574354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A_COERCE:%.*]], i32 [[D:%.*]]) #[[ATTR4]] {
3575354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3576354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3577354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3578354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3579354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <1 x i64> [[TMP3]] to i64
3580354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP7]], 0
3581354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP1:%.*]] = icmp ne i32 [[TMP6]], 0
3582354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP]], [[_MSCMP1]]
35838ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP5:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
3584b7e4fba6SJames Y Knight; CHECK:       3:
3585354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
3586354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
3587b7e4fba6SJames Y Knight; CHECK:       4:
3588b7e4fba6SJames Y Knight; CHECK-NEXT:    [[TMP9:%.*]] = tail call <1 x i64> @llvm.x86.mmx.pinsr.w(<1 x i64> [[A_COERCE]], i32 [[D]], i32 2)
3589354a04c8SVitaly Buka; CHECK-NEXT:    store <1 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
3590b7e4fba6SJames Y Knight; CHECK-NEXT:    ret <1 x i64> [[TMP9]]
359178341f36SVitaly Buka;
359278341f36SVitaly Bukaentry:
3593b7e4fba6SJames Y Knight  %1 = tail call <1 x i64> @llvm.x86.mmx.pinsr.w(<1 x i64> %a.coerce, i32 %d, i32 2)
3594b7e4fba6SJames Y Knight  ret <1 x i64> %1
359578341f36SVitaly Buka}
359678341f36SVitaly Buka
3597b7e4fba6SJames Y Knightdeclare <1 x i64> @llvm.x86.mmx.pinsr.w(<1 x i64>, i32, i32 immarg)
359878341f36SVitaly Buka
3599354a04c8SVitaly Bukadefine i32 @test_mm_extract_pi16(<1 x i64> %a.coerce) nounwind #0 {
3600354a04c8SVitaly Buka; CHECK-LABEL: define i32 @test_mm_extract_pi16(
3601354a04c8SVitaly Buka; CHECK-SAME: <1 x i64> [[A_COERCE:%.*]]) #[[ATTR4]] {
3602354a04c8SVitaly Buka; CHECK-NEXT:  entry:
3603354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
3604354a04c8SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3605354a04c8SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = bitcast <1 x i64> [[TMP2]] to i64
3606354a04c8SVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP5]], 0
36078ef171eeSThurston Dang; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
3608b7e4fba6SJames Y Knight; CHECK:       2:
3609354a04c8SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR6]]
3610354a04c8SVitaly Buka; CHECK-NEXT:    unreachable
3611b7e4fba6SJames Y Knight; CHECK:       3:
3612b7e4fba6SJames Y Knight; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.mmx.pextr.w(<1 x i64> [[A_COERCE]], i32 2)
3613354a04c8SVitaly Buka; CHECK-NEXT:    store i32 0, ptr @__msan_retval_tls, align 8
3614354a04c8SVitaly Buka; CHECK-NEXT:    ret i32 [[TMP1]]
361578341f36SVitaly Buka;
361678341f36SVitaly Bukaentry:
3617b7e4fba6SJames Y Knight  %1 = tail call i32 @llvm.x86.mmx.pextr.w(<1 x i64> %a.coerce, i32 2)
361878341f36SVitaly Buka  ret i32 %1
361978341f36SVitaly Buka}
362078341f36SVitaly Buka
3621b7e4fba6SJames Y Knightdeclare i32 @llvm.x86.mmx.pextr.w(<1 x i64>, i32 immarg)
3622354a04c8SVitaly Buka
3623354a04c8SVitaly Bukaattributes #0 = { sanitize_memory }
3624354a04c8SVitaly Buka;.
36258ef171eeSThurston Dang; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575}
3626354a04c8SVitaly Buka;.
3627