@@ -77,3 +77,41 @@ if.end:
77
77
%ret = call float @llvm.fabs.f32 (float %value )
78
78
ret float %ret
79
79
}
80
+
81
+ define <2 x float > @test_signbit_check_wrong_type (<2 x float > %x , i1 %cond ) {
82
+ ; CHECK-LABEL: define <2 x float> @test_signbit_check_wrong_type(
83
+ ; CHECK-SAME: <2 x float> [[X:%.*]], i1 [[COND:%.*]]) {
84
+ ; CHECK-NEXT: [[I32:%.*]] = bitcast <2 x float> [[X]] to i64
85
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[I32]], 0
86
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
87
+ ; CHECK: if.then1:
88
+ ; CHECK-NEXT: [[FNEG:%.*]] = fneg <2 x float> [[X]]
89
+ ; CHECK-NEXT: br label [[IF_END:%.*]]
90
+ ; CHECK: if.else:
91
+ ; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN2:%.*]], label [[IF_END]]
92
+ ; CHECK: if.then2:
93
+ ; CHECK-NEXT: br label [[IF_END]]
94
+ ; CHECK: if.end:
95
+ ; CHECK-NEXT: [[VALUE:%.*]] = phi <2 x float> [ [[FNEG]], [[IF_THEN1]] ], [ [[X]], [[IF_THEN2]] ], [ [[X]], [[IF_ELSE]] ]
96
+ ; CHECK-NEXT: [[RET:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[VALUE]])
97
+ ; CHECK-NEXT: ret <2 x float> [[RET]]
98
+ ;
99
+ %i32 = bitcast <2 x float > %x to i64
100
+ %cmp = icmp slt i64 %i32 , 0
101
+ br i1 %cmp , label %if.then1 , label %if.else
102
+
103
+ if.then1:
104
+ %fneg = fneg <2 x float > %x
105
+ br label %if.end
106
+
107
+ if.else:
108
+ br i1 %cond , label %if.then2 , label %if.end
109
+
110
+ if.then2:
111
+ br label %if.end
112
+
113
+ if.end:
114
+ %value = phi <2 x float > [ %fneg , %if.then1 ], [ %x , %if.then2 ], [ %x , %if.else ]
115
+ %ret = call <2 x float > @llvm.fabs.v2f32 (<2 x float > %value )
116
+ ret <2 x float > %ret
117
+ }
0 commit comments