brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.7 KiB · 32a53d8 Raw
629 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir2// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR3// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll4// RUN: FileCheck --input-file=%t-cir.ll %s -check-prefix=LLVM5// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll6// RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG7 8int test_builtin_clrsb(int x) {9  return __builtin_clrsb(x);10}11 12// CIR-LABEL: _Z18test_builtin_clrsbi13// CIR:         [[TMP:%.+]] = cir.clrsb %{{.+}} : !s32i14 15// LLVM-LABEL: _Z18test_builtin_clrsbi16// LLVM:         %[[X:.+]] = load i32, ptr %{{.+}}, align 417// LLVM-NEXT:    %[[X_NEG:.+]] = icmp slt i32 %[[X]], 018// LLVM-NEXT:    %[[X_NOT:.+]] = xor i32 %[[X]], -119// LLVM-NEXT:    %[[P:.+]] = select i1 %[[X_NEG]], i32 %[[X_NOT]], i32 %[[X]]20// LLVM-NEXT:    %[[LZ:.+]] = call i32 @llvm.ctlz.i32(i32 %[[P]], i1 false)21// LLVM-NEXT:    %{{.+}} = sub i32 %[[LZ]], 122 23// OGCG-LABEL: _Z18test_builtin_clrsbi24// OGCG:         %[[X:.+]] = load i32, ptr %{{.+}}, align 425// OGCG-NEXT:    %[[X_NEG:.+]] = icmp slt i32 %[[X]], 026// OGCG-NEXT:    %[[X_NOT:.+]] = xor i32 %[[X]], -127// OGCG-NEXT:    %[[P:.+]] = select i1 %[[X_NEG]], i32 %[[X_NOT]], i32 %[[X]]28// OGCG-NEXT:    %[[LZ:.+]] = call i32 @llvm.ctlz.i32(i32 %[[P]], i1 false)29// OGCG-NEXT:    %{{.+}} = sub i32 %[[LZ]], 130 31int test_builtin_clrsbl(long x) {32  return __builtin_clrsbl(x);33}34 35// CIR-LABEL: _Z19test_builtin_clrsbll36// CIR:         [[TMP:%.+]] = cir.clrsb %{{.+}} : !s64i37// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !s64i -> !s32i38 39// LLVM-LABEL: _Z19test_builtin_clrsbll40// LLVM:         %[[X:.+]] = load i64, ptr %{{.+}}, align 841// LLVM-NEXT:    %[[X_NEG:.+]] = icmp slt i64 %[[X]], 042// LLVM-NEXT:    %[[X_NOT:.+]] = xor i64 %[[X]], -143// LLVM-NEXT:    %[[P:.+]] = select i1 %[[X_NEG]], i64 %[[X_NOT]], i64 %[[X]]44// LLVM-NEXT:    %[[LZ:.+]] = call i64 @llvm.ctlz.i64(i64 %[[P]], i1 false)45// LLVM-NEXT:    %{{.+}} = sub i64 %[[LZ]], 146 47// OGCG-LABEL: _Z19test_builtin_clrsbll48// OGCG:         %[[X:.+]] = load i64, ptr %{{.+}}, align 849// OGCG-NEXT:    %[[X_NEG:.+]] = icmp slt i64 %[[X]], 050// OGCG-NEXT:    %[[X_NOT:.+]] = xor i64 %[[X]], -151// OGCG-NEXT:    %[[P:.+]] = select i1 %[[X_NEG]], i64 %[[X_NOT]], i64 %[[X]]52// OGCG-NEXT:    %[[LZ:.+]] = call i64 @llvm.ctlz.i64(i64 %[[P]], i1 false)53// OGCG-NEXT:    %{{.+}} = sub i64 %[[LZ]], 154 55int test_builtin_clrsbll(long long x) {56  return __builtin_clrsbll(x);57}58 59// CIR-LABEL: _Z20test_builtin_clrsbllx60// CIR:         [[TMP:%.+]] = cir.clrsb %{{.+}} : !s64i61// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !s64i -> !s32i62 63// LLVM-LABEL: _Z20test_builtin_clrsbllx64// LLVM:         %[[X:.+]] = load i64, ptr %{{.+}}, align 865// LLVM-NEXT:    %[[X_NEG:.+]] = icmp slt i64 %[[X]], 066// LLVM-NEXT:    %[[X_NOT:.+]] = xor i64 %[[X]], -167// LLVM-NEXT:    %[[P:.+]] = select i1 %[[X_NEG]], i64 %[[X_NOT]], i64 %[[X]]68// LLVM-NEXT:    %[[LZ:.+]] = call i64 @llvm.ctlz.i64(i64 %[[P]], i1 false)69// LLVM-NEXT:    %{{.+}} = sub i64 %[[LZ]], 170 71// OGCG-LABEL: _Z20test_builtin_clrsbllx72// OGCG:         %[[X:.+]] = load i64, ptr %{{.+}}, align 873// OGCG-NEXT:    %[[X_NEG:.+]] = icmp slt i64 %[[X]], 074// OGCG-NEXT:    %[[X_NOT:.+]] = xor i64 %[[X]], -175// OGCG-NEXT:    %[[P:.+]] = select i1 %[[X_NEG]], i64 %[[X_NOT]], i64 %[[X]]76// OGCG-NEXT:    %[[LZ:.+]] = call i64 @llvm.ctlz.i64(i64 %[[P]], i1 false)77// OGCG-NEXT:    %{{.+}} = sub i64 %[[LZ]], 178 79int test_builtin_ctzs(unsigned short x) {80  return __builtin_ctzs(x);81}82 83// CIR-LABEL: _Z17test_builtin_ctzst84// CIR:         [[TMP:%.+]] = cir.ctz %{{.+}} poison_zero : !u16i85// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u16i -> !s32i86 87// LLVM-LABEL: _Z17test_builtin_ctzst88// LLVM:         %{{.+}} = call i16 @llvm.cttz.i16(i16 %{{.+}}, i1 true)89 90// OGCG-LABEL: _Z17test_builtin_ctzst91// OGCG:         %{{.+}} = call i16 @llvm.cttz.i16(i16 %{{.+}}, i1 true)92 93int test_builtin_ctz(unsigned x) {94  return __builtin_ctz(x);95}96 97// CIR-LABEL: _Z16test_builtin_ctzj98// CIR:         [[TMP:%.+]] = cir.ctz %{{.+}} poison_zero : !u32i99// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i100 101// LLVM-LABEL: _Z16test_builtin_ctzj102// LLVM:         %{{.+}} = call i32 @llvm.cttz.i32(i32 %{{.+}}, i1 true)103 104// OGCG-LABEL: _Z16test_builtin_ctzj105// OGCG:         %{{.+}} = call i32 @llvm.cttz.i32(i32 %{{.+}}, i1 true)106 107int test_builtin_ctzl(unsigned long x) {108  return __builtin_ctzl(x);109}110 111// CIR-LABEL: _Z17test_builtin_ctzlm112// CIR:         [[TMP:%.+]] = cir.ctz %{{.+}} poison_zero : !u64i113// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i114 115// LLVM-LABEL: _Z17test_builtin_ctzlm116// LLVM:         %{{.+}} = call i64 @llvm.cttz.i64(i64 %{{.+}}, i1 true)117 118// OGCG-LABEL: _Z17test_builtin_ctzlm119// OGCG:         %{{.+}} = call i64 @llvm.cttz.i64(i64 %{{.+}}, i1 true)120 121int test_builtin_ctzll(unsigned long long x) {122  return __builtin_ctzll(x);123}124 125// CIR-LABEL: _Z18test_builtin_ctzlly126// CIR:         [[TMP:%.+]] = cir.ctz %{{.+}} poison_zero : !u64i127// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i128 129// LLVM-LABEL: _Z18test_builtin_ctzlly130// LLVM:         %{{.+}} = call i64 @llvm.cttz.i64(i64 %{{.+}}, i1 true)131 132// OGCG-LABEL: _Z18test_builtin_ctzlly133// OGCG:         %{{.+}} = call i64 @llvm.cttz.i64(i64 %{{.+}}, i1 true)134 135int test_builtin_ctzg(unsigned x) {136  return __builtin_ctzg(x);137}138 139// CIR-LABEL: _Z17test_builtin_ctzgj140// CIR:         [[TMP:%.+]] = cir.ctz %{{.+}} poison_zero : !u32i141// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i142 143// LLVM-LABEL: _Z17test_builtin_ctzgj144// LLVM:         %{{.+}} = call i32 @llvm.cttz.i32(i32 %{{.+}}, i1 true)145 146// OGCG-LABEL: _Z17test_builtin_ctzgj147// OGCG:         %{{.+}} = call i32 @llvm.cttz.i32(i32 %{{.+}}, i1 true)148 149int test_builtin_clzs(unsigned short x) {150  return __builtin_clzs(x);151}152 153// CIR-LABEL: _Z17test_builtin_clzst154// CIR:         [[TMP:%.+]] = cir.clz %{{.+}} poison_zero : !u16i155// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u16i -> !s32i156 157// LLVM-LABEL: _Z17test_builtin_clzst158// LLVM:         %{{.+}} = call i16 @llvm.ctlz.i16(i16 %{{.+}}, i1 true)159 160// OGCG-LABEL: _Z17test_builtin_clzst161// OGCG:         %{{.+}} = call i16 @llvm.ctlz.i16(i16 %{{.+}}, i1 true)162 163int test_builtin_clz(unsigned x) {164  return __builtin_clz(x);165}166 167// CIR-LABEL: _Z16test_builtin_clzj168// CIR:         [[TMP:%.+]] = cir.clz %{{.+}} poison_zero : !u32i169// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i170 171// LLVM-LABEL: _Z16test_builtin_clzj172// LLVM:         %{{.+}} = call i32 @llvm.ctlz.i32(i32 %{{.+}}, i1 true)173 174// OGCG-LABEL: _Z16test_builtin_clzj175// OGCG:         %{{.+}} = call i32 @llvm.ctlz.i32(i32 %{{.+}}, i1 true)176 177int test_builtin_clzl(unsigned long x) {178  return __builtin_clzl(x);179}180 181// CIR-LABEL: _Z17test_builtin_clzlm182// CIR:         [[TMP:%.+]] = cir.clz %{{.+}} poison_zero : !u64i183// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i184 185// LLVM-LABEL: _Z17test_builtin_clzlm186// LLVM:         %{{.+}} = call i64 @llvm.ctlz.i64(i64 %{{.+}}, i1 true)187 188// OGCG-LABEL: _Z17test_builtin_clzlm189// OGCG:         %{{.+}} = call i64 @llvm.ctlz.i64(i64 %{{.+}}, i1 true)190 191int test_builtin_clzll(unsigned long long x) {192  return __builtin_clzll(x);193}194 195// CIR-LABEL: _Z18test_builtin_clzlly196// CIR:         [[TMP:%.+]] = cir.clz %{{.+}} poison_zero : !u64i197// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i198 199// LLVM-LABEL: _Z18test_builtin_clzlly200// LLVM:         %{{.+}} = call i64 @llvm.ctlz.i64(i64 %{{.+}}, i1 true)201 202// OGCG-LABEL: _Z18test_builtin_clzlly203// OGCG:         %{{.+}} = call i64 @llvm.ctlz.i64(i64 %{{.+}}, i1 true)204 205int test_builtin_clzg(unsigned x) {206  return __builtin_clzg(x);207}208 209// CIR-LABEL: _Z17test_builtin_clzgj210// CIR:         [[TMP:%.+]] = cir.clz %{{.+}} poison_zero : !u32i211// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i212 213// LLVM-LABEL: _Z17test_builtin_clzgj214// LLVM:         %{{.+}} = call i32 @llvm.ctlz.i32(i32 %{{.+}}, i1 true)215 216// OGCG-LABEL: _Z17test_builtin_clzgj217// OGCG:         %{{.+}} = call i32 @llvm.ctlz.i32(i32 %{{.+}}, i1 true)218 219int test_builtin_ffs(int x) {220  return __builtin_ffs(x);221}222 223// CIR-LABEL: _Z16test_builtin_ffsi224// CIR:         %{{.+}} = cir.ffs %{{.+}} : !s32i225// CIR:       }226 227// LLVM-LABEL: _Z16test_builtin_ffsi228// LLVM:         %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4229// LLVM-NEXT:    %[[CTZ:.+]] = call i32 @llvm.cttz.i32(i32 %[[INPUT]], i1 true)230// LLVM-NEXT:    %[[R1:.+]] = add i32 %[[CTZ]], 1231// LLVM-NEXT:    %[[IS_ZERO:.+]] = icmp eq i32 %[[INPUT]], 0232// LLVM-NEXT:    %{{.+}} = select i1 %[[IS_ZERO]], i32 0, i32 %[[R1]]233// LLVM:       }234 235// OGCG-LABEL: _Z16test_builtin_ffsi236// OGCG:         %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4237// OGCG-NEXT:    %[[CTZ:.+]] = call i32 @llvm.cttz.i32(i32 %[[INPUT]], i1 true)238// OGCG-NEXT:    %[[R1:.+]] = add i32 %[[CTZ]], 1239// OGCG-NEXT:    %[[IS_ZERO:.+]] = icmp eq i32 %[[INPUT]], 0240// OGCG-NEXT:    %{{.+}} = select i1 %[[IS_ZERO]], i32 0, i32 %[[R1]]241// OGCG:       }242 243int test_builtin_ffsl(long x) {244  return __builtin_ffsl(x);245}246 247// CIR-LABEL: _Z17test_builtin_ffsll248// CIR:         %{{.+}} = cir.ffs %{{.+}} : !s64i249// CIR:       }250 251// LLVM-LABEL: _Z17test_builtin_ffsll252// LLVM:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8253// LLVM-NEXT:    %[[CTZ:.+]] = call i64 @llvm.cttz.i64(i64 %[[INPUT]], i1 true)254// LLVM-NEXT:    %[[R1:.+]] = add i64 %[[CTZ]], 1255// LLVM-NEXT:    %[[IS_ZERO:.+]] = icmp eq i64 %[[INPUT]], 0256// LLVM-NEXT:    %{{.+}} = select i1 %[[IS_ZERO]], i64 0, i64 %[[R1]]257// LLVM:       }258 259// OGCG-LABEL: _Z17test_builtin_ffsll260// OGCG:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8261// OGCG-NEXT:    %[[CTZ:.+]] = call i64 @llvm.cttz.i64(i64 %[[INPUT]], i1 true)262// OGCG-NEXT:    %[[R1:.+]] = add i64 %[[CTZ]], 1263// OGCG-NEXT:    %[[IS_ZERO:.+]] = icmp eq i64 %[[INPUT]], 0264// OGCG-NEXT:    %{{.+}} = select i1 %[[IS_ZERO]], i64 0, i64 %[[R1]]265// OGCG:       }266 267int test_builtin_ffsll(long long x) {268  return __builtin_ffsll(x);269}270 271// CIR-LABEL: _Z18test_builtin_ffsllx272// CIR:         %{{.+}} = cir.ffs %{{.+}} : !s64i273// CIR:       }274 275// LLVM-LABEL: _Z18test_builtin_ffsllx276// LLVM:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8277// LLVM-NEXT:    %[[CTZ:.+]] = call i64 @llvm.cttz.i64(i64 %[[INPUT]], i1 true)278// LLVM-NEXT:    %[[R1:.+]] = add i64 %[[CTZ]], 1279// LLVM-NEXT:    %[[IS_ZERO:.+]] = icmp eq i64 %[[INPUT]], 0280// LLVM-NEXT:    %{{.+}} = select i1 %[[IS_ZERO]], i64 0, i64 %[[R1]]281// LLVM:       }282 283// OGCG-LABEL: _Z18test_builtin_ffsllx284// OGCG:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8285// OGCG-NEXT:    %[[CTZ:.+]] = call i64 @llvm.cttz.i64(i64 %[[INPUT]], i1 true)286// OGCG-NEXT:    %[[R1:.+]] = add i64 %[[CTZ]], 1287// OGCG-NEXT:    %[[IS_ZERO:.+]] = icmp eq i64 %[[INPUT]], 0288// OGCG-NEXT:    %{{.+}} = select i1 %[[IS_ZERO]], i64 0, i64 %[[R1]]289// OGCG:       }290 291int test_builtin_parity(unsigned x) {292  return __builtin_parity(x);293}294 295// CIR-LABEL: _Z19test_builtin_parityj296// CIR:         [[TMP:%.+]] = cir.parity %{{.+}} : !u32i297// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i298 299// LLVM-LABEL: _Z19test_builtin_parityj300// LLVM:         %[[X:.+]] = load i32, ptr %{{.+}}, align 4301// LLVM-NEXT:    %[[POPCNT:.+]] = call i32 @llvm.ctpop.i32(i32 %[[X]])302// LLVM-NEXT:    %{{.+}} = and i32 %[[POPCNT]], 1303 304// OGCG-LABEL: _Z19test_builtin_parityj305// OGCG:         %[[X:.+]] = load i32, ptr %{{.+}}, align 4306// OGCG-NEXT:    %[[POPCNT:.+]] = call i32 @llvm.ctpop.i32(i32 %[[X]])307// OGCG-NEXT:    %{{.+}} = and i32 %[[POPCNT]], 1308 309int test_builtin_parityl(unsigned long x) {310  return __builtin_parityl(x);311}312 313// CIR-LABEL: _Z20test_builtin_paritylm314// CIR:         [[TMP:%.+]] = cir.parity %{{.+}} : !u64i315// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i316 317// LLVM-LABEL: _Z20test_builtin_paritylm318// LLVM:         %[[X:.+]] = load i64, ptr %{{.+}}, align 8319// LLVM-NEXT:    %[[POPCNT:.+]] = call i64 @llvm.ctpop.i64(i64 %[[X]])320// LLVM-NEXT:    %{{.+}} = and i64 %[[POPCNT]], 1321 322// OGCG-LABEL: _Z20test_builtin_paritylm323// OGCG:         %[[X:.+]] = load i64, ptr %{{.+}}, align 8324// OGCG-NEXT:    %[[POPCNT:.+]] = call i64 @llvm.ctpop.i64(i64 %[[X]])325// OGCG-NEXT:    %{{.+}} = and i64 %[[POPCNT]], 1326 327int test_builtin_parityll(unsigned long long x) {328  return __builtin_parityll(x);329}330 331// CIR-LABEL: _Z21test_builtin_paritylly332// CIR:         [[TMP:%.+]] = cir.parity %{{.+}} : !u64i333// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i334 335// LLVM-LABEL: _Z21test_builtin_paritylly336// LLVM:         %[[X:.+]] = load i64, ptr %{{.+}}, align 8337// LLVM-NEXT:    %[[POPCNT:.+]] = call i64 @llvm.ctpop.i64(i64 %[[X]])338// LLVM-NEXT:    %{{.+}} = and i64 %[[POPCNT]], 1339 340// OGCG-LABEL: _Z21test_builtin_paritylly341// OGCG:         %[[X:.+]] = load i64, ptr %{{.+}}, align 8342// OGCG-NEXT:    %[[POPCNT:.+]] = call i64 @llvm.ctpop.i64(i64 %[[X]])343// OGCG-NEXT:    %{{.+}} = and i64 %[[POPCNT]], 1344 345int test_builtin_popcount(unsigned x) {346  return __builtin_popcount(x);347}348 349// CIR-LABEL: _Z21test_builtin_popcountj350// CIR:         [[TMP:%.+]] = cir.popcount %{{.+}} : !u32i351// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i352 353// LLVM-LABEL: _Z21test_builtin_popcountj354// LLVM:         %{{.+}} = call i32 @llvm.ctpop.i32(i32 %{{.+}})355 356// OGCG-LABEL: _Z21test_builtin_popcountj357// OGCG:         %{{.+}} = call i32 @llvm.ctpop.i32(i32 %{{.+}})358 359int test_builtin_popcountl(unsigned long x) {360  return __builtin_popcountl(x);361}362 363// CIR-LABEL: _Z22test_builtin_popcountlm364// CIR:         [[TMP:%.+]] = cir.popcount %{{.+}} : !u64i365// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i366 367// LLVM-LABEL: _Z22test_builtin_popcountlm368// LLVM:         %{{.+}} = call i64 @llvm.ctpop.i64(i64 %{{.+}})369 370// OGCG-LABEL: _Z22test_builtin_popcountlm371// OGCG:         %{{.+}} = call i64 @llvm.ctpop.i64(i64 %{{.+}})372 373int test_builtin_popcountll(unsigned long long x) {374  return __builtin_popcountll(x);375}376 377// CIR-LABEL: _Z23test_builtin_popcountlly378// CIR:         [[TMP:%.+]] = cir.popcount %{{.+}} : !u64i379// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u64i -> !s32i380 381// LLVM-LABEL: _Z23test_builtin_popcountlly382// LLVM:         %{{.+}} = call i64 @llvm.ctpop.i64(i64 %{{.+}})383 384// OGCG-LABEL: _Z23test_builtin_popcountlly385// OGCG:         %{{.+}} = call i64 @llvm.ctpop.i64(i64 %{{.+}})386 387int test_builtin_popcountg(unsigned x) {388  return __builtin_popcountg(x);389}390 391// CIR-LABEL: _Z22test_builtin_popcountgj392// CIR:         [[TMP:%.+]] = cir.popcount %{{.+}} : !u32i393// CIR:         {{%.+}} = cir.cast integral [[TMP]] : !u32i -> !s32i394 395// LLVM-LABEL: _Z22test_builtin_popcountgj396// LLVM:         %{{.+}} = call i32 @llvm.ctpop.i32(i32 %{{.+}})397 398// OGCG-LABEL: _Z22test_builtin_popcountgj399// OGCG:         %{{.+}} = call i32 @llvm.ctpop.i32(i32 %{{.+}})400 401unsigned char test_builtin_bitreverse8(unsigned char x) {402  return __builtin_bitreverse8(x);403}404 405// CIR-LABEL: @_Z24test_builtin_bitreverse8h406// CIR:         %{{.+}} = cir.bitreverse %{{.+}} : !u8i407 408// LLVM-LABEL: @_Z24test_builtin_bitreverse8h409// LLVM:         %{{.+}} = call i8 @llvm.bitreverse.i8(i8 %{{.+}})410 411// OGCG-LABEL: @_Z24test_builtin_bitreverse8h412// OGCG:         %{{.+}} = call i8 @llvm.bitreverse.i8(i8 %{{.+}})413 414unsigned short test_builtin_bitreverse16(unsigned short x) {415  return __builtin_bitreverse16(x);416}417 418// CIR-LABEL: @_Z25test_builtin_bitreverse16t419// CIR:         %{{.+}} = cir.bitreverse %{{.+}} : !u16i420 421// LLVM-LABEL: @_Z25test_builtin_bitreverse16t422// LLVM:         %{{.+}} = call i16 @llvm.bitreverse.i16(i16 %{{.+}})423 424// OGCG-LABEL: @_Z25test_builtin_bitreverse16t425// OGCG:         %{{.+}} = call i16 @llvm.bitreverse.i16(i16 %{{.+}})426 427unsigned test_builtin_bitreverse32(unsigned x) {428  return __builtin_bitreverse32(x);429}430 431// CIR-LABEL: @_Z25test_builtin_bitreverse32j432// CIR:         %{{.+}} = cir.bitreverse %{{.+}} : !u32i433 434// LLVM-LABEL: @_Z25test_builtin_bitreverse32j435// LLVM:         %{{.+}} = call i32 @llvm.bitreverse.i32(i32 %{{.+}})436 437// OGCG-LABEL: @_Z25test_builtin_bitreverse32j438// OGCG:         %{{.+}} = call i32 @llvm.bitreverse.i32(i32 %{{.+}})439 440unsigned long long test_builtin_bitreverse64(unsigned long long x) {441  return __builtin_bitreverse64(x);442}443 444// CIR-LABEL: @_Z25test_builtin_bitreverse64y445// CIR:         %{{.+}} = cir.bitreverse %{{.+}} : !u64i446 447// LLVM-LABEL: @_Z25test_builtin_bitreverse64y448// LLVM:         %{{.+}} = call i64 @llvm.bitreverse.i64(i64 %{{.+}})449 450// OGCG-LABEL: @_Z25test_builtin_bitreverse64y451// OGCG:         %{{.+}} = call i64 @llvm.bitreverse.i64(i64 %{{.+}})452 453unsigned short test_builtin_bswap16(unsigned short x) {454  return __builtin_bswap16(x);455}456 457// CIR-LABEL: @_Z20test_builtin_bswap16t458// CIR:         %{{.+}} = cir.byte_swap %{{.+}} : !u16i459 460// LLVM-LABEL: @_Z20test_builtin_bswap16t461// LLVM:         %{{.+}} = call i16 @llvm.bswap.i16(i16 %{{.+}})462 463// OGCG-LABEL: @_Z20test_builtin_bswap16t464// OGCG:         %{{.+}} = call i16 @llvm.bswap.i16(i16 %{{.+}})465 466unsigned test_builtin_bswap32(unsigned x) {467  return __builtin_bswap32(x);468}469 470// CIR-LABEL: @_Z20test_builtin_bswap32j471// CIR:         %{{.+}} = cir.byte_swap %{{.+}} : !u32i472 473// LLVM-LABEL: @_Z20test_builtin_bswap32j474// LLVM:         %{{.+}} = call i32 @llvm.bswap.i32(i32 %{{.+}})475 476// OGCG-LABEL: @_Z20test_builtin_bswap32j477// OGCG:         %{{.+}} = call i32 @llvm.bswap.i32(i32 %{{.+}})478 479unsigned long long test_builtin_bswap64(unsigned long long x) {480  return __builtin_bswap64(x);481}482 483// CIR-LABEL: @_Z20test_builtin_bswap64y484// CIR:         %{{.+}} = cir.byte_swap %{{.+}} : !u64i485 486// LLVM-LABEL: @_Z20test_builtin_bswap64y487// LLVM:         %{{.+}} = call i64 @llvm.bswap.i64(i64 %{{.+}})488 489// OGCG-LABEL: @_Z20test_builtin_bswap64y490// OGCG:         %{{.+}} = call i64 @llvm.bswap.i64(i64 %{{.+}})491 492unsigned char test_builtin_rotateleft8(unsigned char x, unsigned char y) {493  return __builtin_rotateleft8(x, y);494}495 496// CIR-LABEL: @_Z24test_builtin_rotateleft8hh497// CIR:         %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u8i498 499// LLVM-LABEL: @_Z24test_builtin_rotateleft8hh500// LLVM:         %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1501// LLVM-NEXT:    %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1502// LLVM-NEXT:    %{{.+}} = call i8 @llvm.fshl.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])503 504// OGCG-LABEL: @_Z24test_builtin_rotateleft8hh505// OGCG:         %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1506// OGCG-NEXT:    %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1507// OGCG-NEXT:    %{{.+}} = call i8 @llvm.fshl.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])508 509unsigned short test_builtin_rotateleft16(unsigned short x, unsigned short y) {510  return __builtin_rotateleft16(x, y);511}512 513// CIR-LABEL: @_Z25test_builtin_rotateleft16tt514// CIR:         %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u16i515 516// LLVM-LABEL: @_Z25test_builtin_rotateleft16tt517// LLVM:         %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2518// LLVM-NEXT:    %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2519// LLVM-NEXT:    %{{.+}} = call i16 @llvm.fshl.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])520 521// OGCG-LABEL: @_Z25test_builtin_rotateleft16tt522// OGCG:         %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2523// OGCG-NEXT:    %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2524// OGCG-NEXT:    %{{.+}} = call i16 @llvm.fshl.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])525 526unsigned test_builtin_rotateleft32(unsigned x, unsigned y) {527  return __builtin_rotateleft32(x, y);528}529 530// CIR-LABEL: @_Z25test_builtin_rotateleft32jj531// CIR:         %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u32i532 533// LLVM-LABEL: @_Z25test_builtin_rotateleft32jj534// LLVM:         %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4535// LLVM-NEXT:    %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4536// LLVM-NEXT:    %{{.+}} = call i32 @llvm.fshl.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])537 538// OGCG-LABEL: @_Z25test_builtin_rotateleft32jj539// OGCG:         %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4540// OGCG-NEXT:    %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4541// OGCG-NEXT:    %{{.+}} = call i32 @llvm.fshl.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])542 543unsigned long long test_builtin_rotateleft64(unsigned long long x,544                                             unsigned long long y) {545  return __builtin_rotateleft64(x, y);546}547 548// CIR-LABEL: @_Z25test_builtin_rotateleft64yy549// CIR:         %{{.+}} = cir.rotate left %{{.+}}, %{{.+}} : !u64i550 551// LLVM-LABEL: @_Z25test_builtin_rotateleft64yy552// LLVM:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8553// LLVM-NEXT:    %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8554// LLVM-NEXT:    %{{.+}} = call i64 @llvm.fshl.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])555 556// OGCG-LABEL: @_Z25test_builtin_rotateleft64yy557// OGCG:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8558// OGCG-NEXT:    %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8559// OGCG-NEXT:    %{{.+}} = call i64 @llvm.fshl.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])560 561unsigned char test_builtin_rotateright8(unsigned char x, unsigned char y) {562  return __builtin_rotateright8(x, y);563}564 565// CIR-LABEL: @_Z25test_builtin_rotateright8hh566// CIR:         %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u8i567 568// LLVM-LABEL: @_Z25test_builtin_rotateright8hh569// LLVM:         %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1570// LLVM-NEXT:    %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1571// LLVM-NEXT:    %{{.+}} = call i8 @llvm.fshr.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])572 573// OGCG-LABEL: @_Z25test_builtin_rotateright8hh574// OGCG:         %[[INPUT:.+]] = load i8, ptr %{{.+}}, align 1575// OGCG-NEXT:    %[[AMOUNT:.+]] = load i8, ptr %{{.+}}, align 1576// OGCG-NEXT:    %{{.+}} = call i8 @llvm.fshr.i8(i8 %[[INPUT]], i8 %[[INPUT]], i8 %[[AMOUNT]])577 578unsigned short test_builtin_rotateright16(unsigned short x, unsigned short y) {579  return __builtin_rotateright16(x, y);580}581 582// CIR-LABEL: @_Z26test_builtin_rotateright16tt583// CIR:         %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u16i584 585// LLVM-LABEL: @_Z26test_builtin_rotateright16tt586// LLVM:         %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2587// LLVM-NEXT:    %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2588// LLVM-NEXT:    %{{.+}} = call i16 @llvm.fshr.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])589 590// OGCG-LABEL: @_Z26test_builtin_rotateright16tt591// OGCG:         %[[INPUT:.+]] = load i16, ptr %{{.+}}, align 2592// OGCG-NEXT:    %[[AMOUNT:.+]] = load i16, ptr %{{.+}}, align 2593// OGCG-NEXT:    %{{.+}} = call i16 @llvm.fshr.i16(i16 %[[INPUT]], i16 %[[INPUT]], i16 %[[AMOUNT]])594 595unsigned test_builtin_rotateright32(unsigned x, unsigned y) {596  return __builtin_rotateright32(x, y);597}598 599// CIR-LABEL: @_Z26test_builtin_rotateright32jj600// CIR:         %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u32i601 602// LLVM-LABEL: @_Z26test_builtin_rotateright32jj603// LLVM:         %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4604// LLVM-NEXT:    %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4605// LLVM-NEXT:    %{{.+}} = call i32 @llvm.fshr.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])606 607// OGCG-LABEL: @_Z26test_builtin_rotateright32jj608// OGCG:         %[[INPUT:.+]] = load i32, ptr %{{.+}}, align 4609// OGCG-NEXT:    %[[AMOUNT:.+]] = load i32, ptr %{{.+}}, align 4610// OGCG-NEXT:    %{{.+}} = call i32 @llvm.fshr.i32(i32 %[[INPUT]], i32 %[[INPUT]], i32 %[[AMOUNT]])611 612unsigned long long test_builtin_rotateright64(unsigned long long x,613                                              unsigned long long y) {614  return __builtin_rotateright64(x, y);615}616 617// CIR-LABEL: @_Z26test_builtin_rotateright64yy618// CIR:         %{{.+}} = cir.rotate right %{{.+}}, %{{.+}} : !u64i619 620// LLVM-LABEL: @_Z26test_builtin_rotateright64yy621// LLVM:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8622// LLVM-NEXT:    %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8623// LLVM-NEXT:    %{{.+}} = call i64 @llvm.fshr.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])624 625// OGCG-LABEL: @_Z26test_builtin_rotateright64yy626// OGCG:         %[[INPUT:.+]] = load i64, ptr %{{.+}}, align 8627// OGCG-NEXT:    %[[AMOUNT:.+]] = load i64, ptr %{{.+}}, align 8628// OGCG-NEXT:    %{{.+}} = call i64 @llvm.fshr.i64(i64 %[[INPUT]], i64 %[[INPUT]], i64 %[[AMOUNT]])629