@@ -169,8 +169,8 @@ unsigned int cpucfg(unsigned int a) {
169169
170170// LA32-LABEL: @rdtime(
171171// LA32-NEXT: entry:
172- // LA32-NEXT: [[TMP0:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimeh.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1:[0-9]+]], !srcloc !2
173- // LA32-NEXT: [[TMP1:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimel.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1]], !srcloc !3
172+ // LA32-NEXT: [[TMP0:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimeh.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1:[0-9]+]], !srcloc [[META2:![0-9]+]]
173+ // LA32-NEXT: [[TMP1:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimel.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1]], !srcloc [[META3:![0-9]+]]
174174// LA32-NEXT: ret void
175175//
176176void rdtime () {
@@ -201,13 +201,28 @@ void loongarch_movgr2fcsr(int a) {
201201 __builtin_loongarch_movgr2fcsr (1 , a );
202202}
203203
204- // CHECK -LABEL: @cacop_w(
205- // CHECK -NEXT: entry:
206- // CHECK -NEXT: tail call void @llvm.loongarch.cacop.w(i32 1, i32 [[A:%.*]], i32 1024)
207- // CHECK -NEXT: tail call void @llvm.loongarch.cacop.w(i32 1, i32 [[A]], i32 1024)
208- // CHECK -NEXT: ret void
204+ // LA32 -LABEL: @cacop_w(
205+ // LA32 -NEXT: entry:
206+ // LA32 -NEXT: tail call void @llvm.loongarch.cacop.w(i32 1, i32 [[A:%.*]], i32 1024)
207+ // LA32 -NEXT: tail call void @llvm.loongarch.cacop.w(i32 1, i32 [[A]], i32 1024)
208+ // LA32 -NEXT: ret void
209209//
210210void cacop_w (unsigned long int a ) {
211211 __cacop_w (1 , a , 1024 );
212212 __builtin_loongarch_cacop_w (1 , a , 1024 );
213213}
214+
215+ // LA32-LABEL: @iocsrrd_h_result(
216+ // LA32-NEXT: entry:
217+ // LA32-NEXT: [[TMP0:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.h(i32 [[A:%.*]])
218+ // LA32-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.h(i32 [[A]])
219+ // LA32-NEXT: [[CONV2:%.*]] = and i32 [[TMP0]], 255
220+ // LA32-NEXT: [[ADD:%.*]] = add i32 [[TMP1]], [[CONV2]]
221+ // LA32-NEXT: [[CONV4:%.*]] = trunc i32 [[ADD]] to i16
222+ // LA32-NEXT: ret i16 [[CONV4]]
223+ //
224+ unsigned short iocsrrd_h_result (unsigned int a ) {
225+ unsigned short b = __iocsrrd_h (a );
226+ unsigned short c = __builtin_loongarch_iocsrrd_h (a );
227+ return b + c ;
228+ }
0 commit comments