@@ -106,3 +106,37 @@ define i32 @test_vec_test_swsqrts(<4 x float> %a) {
106
106
ret i32 %0
107
107
}
108
108
declare i32 @llvm.ppc.vsx.xvtsqrtsp (<4 x float >)
109
+
110
+ define i32 @xvtdivdp_andi (<2 x double > %a , <2 x double > %b ) {
111
+ ; CHECK-LABEL: xvtdivdp_andi:
112
+ ; CHECK: # %bb.0: # %entry
113
+ ; CHECK-NEXT: xvtdivdp cr0, v2, v3
114
+ ; CHECK-NEXT: li r4, 222
115
+ ; CHECK-NEXT: mfocrf r3, 128
116
+ ; CHECK-NEXT: srwi r3, r3, 28
117
+ ; CHECK-NEXT: andi. r3, r3, 2
118
+ ; CHECK-NEXT: li r3, 22
119
+ ; CHECK-NEXT: iseleq r3, r4, r3
120
+ ; CHECK-NEXT: blr
121
+ entry:
122
+ %0 = tail call i32 @llvm.ppc.vsx.xvtdivdp (<2 x double > %a , <2 x double > %b )
123
+ %1 = and i32 %0 , 2
124
+ %cmp.not = icmp eq i32 %1 , 0
125
+ %retval.0 = select i1 %cmp.not , i32 222 , i32 22
126
+ ret i32 %retval.0
127
+ }
128
+
129
+ define i32 @xvtdivdp_shift (<2 x double > %a , <2 x double > %b ) {
130
+ ; CHECK-LABEL: xvtdivdp_shift:
131
+ ; CHECK: # %bb.0: # %entry
132
+ ; CHECK-NEXT: xvtdivdp cr0, v2, v3
133
+ ; CHECK-NEXT: mfocrf r3, 128
134
+ ; CHECK-NEXT: srwi r3, r3, 28
135
+ ; CHECK-NEXT: rlwinm r3, r3, 28, 31, 31
136
+ ; CHECK-NEXT: blr
137
+ entry:
138
+ %0 = tail call i32 @llvm.ppc.vsx.xvtdivdp (<2 x double > %a , <2 x double > %b )
139
+ %1 = lshr i32 %0 , 4
140
+ %.lobit = and i32 %1 , 1
141
+ ret i32 %.lobit
142
+ }
0 commit comments