@@ -416,3 +416,141 @@ unsigned long long test_builtin_bswap64(unsigned long long x) {
416416
417417// OGCG-LABEL: @_Z20test_builtin_bswap64y
418418// 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