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