@@ -416,3 +416,141 @@ unsigned long long test_builtin_bswap64(unsigned long long x) {
416
416
417
417
// OGCG-LABEL: @_Z20test_builtin_bswap64y
418
418
// OGCG: %{{.+}} = call i64 @llvm.bswap.i64(i64 %{{.+}})
419
+
420
+ unsigned char test_builtin_rotateleft8 (unsigned char x, unsigned char y) {
421
+ return __builtin_rotateleft8 (x, y);
422
+ }
423
+
424
+ // CIR-LABEL: @_Z24test_builtin_rotateleft8hh
425
+ // CIR: %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u8i
426
+
427
+ // LLVM-LABEL: @_Z24test_builtin_rotateleft8hh
428
+ // LLVM: %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1
429
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1
430
+ // LLVM-NEXT: %{{.+}} = call i8 @llvm.fshl.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])
431
+
432
+ // OGCG-LABEL: @_Z24test_builtin_rotateleft8hh
433
+ // OGCG: %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1
434
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1
435
+ // OGCG-NEXT: %{{.+}} = call i8 @llvm.fshl.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])
436
+
437
+ unsigned short test_builtin_rotateleft16 (unsigned short x, unsigned short y) {
438
+ return __builtin_rotateleft16 (x, y);
439
+ }
440
+
441
+ // CIR-LABEL: @_Z25test_builtin_rotateleft16tt
442
+ // CIR: %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u16i
443
+
444
+ // LLVM-LABEL: @_Z25test_builtin_rotateleft16tt
445
+ // LLVM: %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2
446
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2
447
+ // LLVM-NEXT: %{{.+}} = call i16 @llvm.fshl.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])
448
+
449
+ // OGCG-LABEL: @_Z25test_builtin_rotateleft16tt
450
+ // OGCG: %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2
451
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2
452
+ // OGCG-NEXT: %{{.+}} = call i16 @llvm.fshl.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])
453
+
454
+ unsigned test_builtin_rotateleft32 (unsigned x, unsigned y) {
455
+ return __builtin_rotateleft32 (x, y);
456
+ }
457
+
458
+ // CIR-LABEL: @_Z25test_builtin_rotateleft32jj
459
+ // CIR: %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u32i
460
+
461
+ // LLVM-LABEL: @_Z25test_builtin_rotateleft32jj
462
+ // LLVM: %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4
463
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4
464
+ // LLVM-NEXT: %{{.+}} = call i32 @llvm.fshl.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])
465
+
466
+ // OGCG-LABEL: @_Z25test_builtin_rotateleft32jj
467
+ // OGCG: %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4
468
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4
469
+ // OGCG-NEXT: %{{.+}} = call i32 @llvm.fshl.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])
470
+
471
+ unsigned long long test_builtin_rotateleft64 (unsigned long long x,
472
+ unsigned long long y) {
473
+ return __builtin_rotateleft64 (x, y);
474
+ }
475
+
476
+ // CIR-LABEL: @_Z25test_builtin_rotateleft64yy
477
+ // CIR: %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u64i
478
+
479
+ // LLVM-LABEL: @_Z25test_builtin_rotateleft64yy
480
+ // LLVM: %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8
481
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8
482
+ // LLVM-NEXT: %{{.+}} = call i64 @llvm.fshl.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])
483
+
484
+ // OGCG-LABEL: @_Z25test_builtin_rotateleft64yy
485
+ // OGCG: %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8
486
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8
487
+ // OGCG-NEXT: %{{.+}} = call i64 @llvm.fshl.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])
488
+
489
+ unsigned char test_builtin_rotateright8 (unsigned char x, unsigned char y) {
490
+ return __builtin_rotateright8 (x, y);
491
+ }
492
+
493
+ // CIR-LABEL: @_Z25test_builtin_rotateright8hh
494
+ // CIR: %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u8i
495
+
496
+ // LLVM-LABEL: @_Z25test_builtin_rotateright8hh
497
+ // LLVM: %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1
498
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1
499
+ // LLVM-NEXT: %{{.+}} = call i8 @llvm.fshr.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])
500
+
501
+ // OGCG-LABEL: @_Z25test_builtin_rotateright8hh
502
+ // OGCG: %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1
503
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1
504
+ // OGCG-NEXT: %{{.+}} = call i8 @llvm.fshr.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])
505
+
506
+ unsigned short test_builtin_rotateright16 (unsigned short x, unsigned short y) {
507
+ return __builtin_rotateright16 (x, y);
508
+ }
509
+
510
+ // CIR-LABEL: @_Z26test_builtin_rotateright16tt
511
+ // CIR: %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u16i
512
+
513
+ // LLVM-LABEL: @_Z26test_builtin_rotateright16tt
514
+ // LLVM: %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2
515
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2
516
+ // LLVM-NEXT: %{{.+}} = call i16 @llvm.fshr.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])
517
+
518
+ // OGCG-LABEL: @_Z26test_builtin_rotateright16tt
519
+ // OGCG: %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2
520
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2
521
+ // OGCG-NEXT: %{{.+}} = call i16 @llvm.fshr.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])
522
+
523
+ unsigned test_builtin_rotateright32 (unsigned x, unsigned y) {
524
+ return __builtin_rotateright32 (x, y);
525
+ }
526
+
527
+ // CIR-LABEL: @_Z26test_builtin_rotateright32jj
528
+ // CIR: %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u32i
529
+
530
+ // LLVM-LABEL: @_Z26test_builtin_rotateright32jj
531
+ // LLVM: %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4
532
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4
533
+ // LLVM-NEXT: %{{.+}} = call i32 @llvm.fshr.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])
534
+
535
+ // OGCG-LABEL: @_Z26test_builtin_rotateright32jj
536
+ // OGCG: %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4
537
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4
538
+ // OGCG-NEXT: %{{.+}} = call i32 @llvm.fshr.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])
539
+
540
+ unsigned long long test_builtin_rotateright64 (unsigned long long x,
541
+ unsigned long long y) {
542
+ return __builtin_rotateright64 (x, y);
543
+ }
544
+
545
+ // CIR-LABEL: @_Z26test_builtin_rotateright64yy
546
+ // CIR: %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u64i
547
+
548
+ // LLVM-LABEL: @_Z26test_builtin_rotateright64yy
549
+ // LLVM: %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8
550
+ // LLVM-NEXT: %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8
551
+ // LLVM-NEXT: %{{.+}} = call i64 @llvm.fshr.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])
552
+
553
+ // OGCG-LABEL: @_Z26test_builtin_rotateright64yy
554
+ // OGCG: %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8
555
+ // OGCG-NEXT: %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8
556
+ // OGCG-NEXT: %{{.+}} = call i64 @llvm.fshr.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])
0 commit comments