1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-linux -o - | FileCheck %s 3 4declare i32 @llvm.smul.fix.i32(i32, i32, i32 immarg) 5declare i32 @llvm.umul.fix.i32(i32, i32, i32 immarg) 6declare i32 @llvm.smul.fix.sat.i32(i32, i32, i32 immarg) 7declare i32 @llvm.umul.fix.sat.i32(i32, i32, i32 immarg) 8 9declare <4 x i32> @llvm.smul.fix.v4i32(<4 x i32>, <4 x i32>, i32 immarg) 10declare <4 x i32> @llvm.umul.fix.v4i32(<4 x i32>, <4 x i32>, i32 immarg) 11declare <4 x i32> @llvm.smul.fix.sat.v4i32(<4 x i32>, <4 x i32>, i32 immarg) 12declare <4 x i32> @llvm.umul.fix.sat.v4i32(<4 x i32>, <4 x i32>, i32 immarg) 13 14define i32 @smulfix_undef(i32 %y) nounwind { 15; CHECK-LABEL: smulfix_undef: 16; CHECK: # %bb.0: 17; CHECK-NEXT: xorl %eax, %eax 18; CHECK-NEXT: retq 19 %tmp = call i32 @llvm.smul.fix.i32(i32 undef, i32 %y, i32 2) 20 ret i32 %tmp 21} 22 23define i32 @smulfix_zero(i32 %y) nounwind { 24; CHECK-LABEL: smulfix_zero: 25; CHECK: # %bb.0: 26; CHECK-NEXT: xorl %eax, %eax 27; CHECK-NEXT: retq 28 %tmp = call i32 @llvm.smul.fix.i32(i32 0, i32 %y, i32 2) 29 ret i32 %tmp 30} 31 32define i32 @umulfix_undef(i32 %y) nounwind { 33; CHECK-LABEL: umulfix_undef: 34; CHECK: # %bb.0: 35; CHECK-NEXT: xorl %eax, %eax 36; CHECK-NEXT: retq 37 %tmp = call i32 @llvm.umul.fix.i32(i32 undef, i32 %y, i32 2) 38 ret i32 %tmp 39} 40 41define i32 @umulfix_zero(i32 %y) nounwind { 42; CHECK-LABEL: umulfix_zero: 43; CHECK: # %bb.0: 44; CHECK-NEXT: xorl %eax, %eax 45; CHECK-NEXT: retq 46 %tmp = call i32 @llvm.umul.fix.i32(i32 0, i32 %y, i32 2) 47 ret i32 %tmp 48} 49 50define i32 @smulfixsat_undef(i32 %y) nounwind { 51; CHECK-LABEL: smulfixsat_undef: 52; CHECK: # %bb.0: 53; CHECK-NEXT: xorl %eax, %eax 54; CHECK-NEXT: retq 55 %tmp = call i32 @llvm.smul.fix.sat.i32(i32 undef, i32 %y, i32 2) 56 ret i32 %tmp 57} 58 59define i32 @smulfixsat_zero(i32 %y) nounwind { 60; CHECK-LABEL: smulfixsat_zero: 61; CHECK: # %bb.0: 62; CHECK-NEXT: xorl %eax, %eax 63; CHECK-NEXT: retq 64 %tmp = call i32 @llvm.smul.fix.sat.i32(i32 0, i32 %y, i32 2) 65 ret i32 %tmp 66} 67 68define i32 @umulfixsat_undef(i32 %y) nounwind { 69; CHECK-LABEL: umulfixsat_undef: 70; CHECK: # %bb.0: 71; CHECK-NEXT: xorl %eax, %eax 72; CHECK-NEXT: retq 73 %tmp = call i32 @llvm.umul.fix.sat.i32(i32 undef, i32 %y, i32 2) 74 ret i32 %tmp 75} 76 77define i32 @umulfixsat_zero(i32 %y) nounwind { 78; CHECK-LABEL: umulfixsat_zero: 79; CHECK: # %bb.0: 80; CHECK-NEXT: xorl %eax, %eax 81; CHECK-NEXT: retq 82 %tmp = call i32 @llvm.umul.fix.sat.i32(i32 0, i32 %y, i32 2) 83 ret i32 %tmp 84} 85 86define <4 x i32> @vec_smulfix_undef(<4 x i32> %y) nounwind { 87; CHECK-LABEL: vec_smulfix_undef: 88; CHECK: # %bb.0: 89; CHECK-NEXT: xorps %xmm0, %xmm0 90; CHECK-NEXT: retq 91 %tmp = call <4 x i32> @llvm.smul.fix.v4i32(<4 x i32> undef, <4 x i32> %y, i32 2) 92 ret <4 x i32> %tmp 93} 94 95define <4 x i32> @vec_smulfix_zero(<4 x i32> %y) nounwind { 96; CHECK-LABEL: vec_smulfix_zero: 97; CHECK: # %bb.0: 98; CHECK-NEXT: xorps %xmm0, %xmm0 99; CHECK-NEXT: retq 100 %tmp = call <4 x i32> @llvm.smul.fix.v4i32(<4 x i32> <i32 0, i32 0, i32 0, i32 0>, <4 x i32> %y, i32 2) 101 ret <4 x i32> %tmp 102} 103 104define <4 x i32> @vec_umulfix_undef(<4 x i32> %y) nounwind { 105; CHECK-LABEL: vec_umulfix_undef: 106; CHECK: # %bb.0: 107; CHECK-NEXT: xorps %xmm0, %xmm0 108; CHECK-NEXT: retq 109 %tmp = call <4 x i32> @llvm.umul.fix.v4i32(<4 x i32> undef, <4 x i32> %y, i32 2) 110 ret <4 x i32> %tmp 111} 112 113define <4 x i32> @vec_umulfix_zero(<4 x i32> %y) nounwind { 114; CHECK-LABEL: vec_umulfix_zero: 115; CHECK: # %bb.0: 116; CHECK-NEXT: xorps %xmm0, %xmm0 117; CHECK-NEXT: retq 118 %tmp = call <4 x i32> @llvm.umul.fix.v4i32(<4 x i32> <i32 0, i32 0, i32 0, i32 0>, <4 x i32> %y, i32 2) 119 ret <4 x i32> %tmp 120} 121 122define <4 x i32> @vec_smulfixsat_undef(<4 x i32> %y) nounwind { 123; CHECK-LABEL: vec_smulfixsat_undef: 124; CHECK: # %bb.0: 125; CHECK-NEXT: xorps %xmm0, %xmm0 126; CHECK-NEXT: retq 127 %tmp = call <4 x i32> @llvm.smul.fix.sat.v4i32(<4 x i32> undef, <4 x i32> %y, i32 2) 128 ret <4 x i32> %tmp 129} 130 131define <4 x i32> @vec_smulfixsat_zero(<4 x i32> %y) nounwind { 132; CHECK-LABEL: vec_smulfixsat_zero: 133; CHECK: # %bb.0: 134; CHECK-NEXT: xorps %xmm0, %xmm0 135; CHECK-NEXT: retq 136 %tmp = call <4 x i32> @llvm.smul.fix.sat.v4i32(<4 x i32> <i32 0, i32 0, i32 0, i32 0>, <4 x i32> %y, i32 2) 137 ret <4 x i32> %tmp 138} 139 140define <4 x i32> @vec_umulfixsat_undef(<4 x i32> %y) nounwind { 141; CHECK-LABEL: vec_umulfixsat_undef: 142; CHECK: # %bb.0: 143; CHECK-NEXT: xorps %xmm0, %xmm0 144; CHECK-NEXT: retq 145 %tmp = call <4 x i32> @llvm.umul.fix.sat.v4i32(<4 x i32> undef, <4 x i32> %y, i32 2) 146 ret <4 x i32> %tmp 147} 148 149define <4 x i32> @vec_umulfixsat_zero(<4 x i32> %y) nounwind { 150; CHECK-LABEL: vec_umulfixsat_zero: 151; CHECK: # %bb.0: 152; CHECK-NEXT: xorps %xmm0, %xmm0 153; CHECK-NEXT: retq 154 %tmp = call <4 x i32> @llvm.umul.fix.sat.v4i32(<4 x i32> <i32 0, i32 0, i32 0, i32 0>, <4 x i32> %y, i32 2) 155 ret <4 x i32> %tmp 156} 157