brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.0 KiB · 261f2cd Raw
337 lines · plain
1; RUN: llc -mtriple=aarch64-- -o - < %s | FileCheck %s --check-prefix=CHECK-SD2; RUN: llc -mtriple=aarch64-- -mattr=+cssc -o - < %s | FileCheck %s --check-prefix=CHECK-CSSC3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "aarch64-unknown-linux-gnu"6 7; auto icmpi64(long x0) { return x0 != 0; }8define i1 @icmpi64(i64 noundef %0) {9; CHECK-SD-LABEL: icmpi64:10; CHECK-SD:       // %bb.0: // %entry11; CHECK-SD-NEXT:    cmp x0, #012; CHECK-SD-NEXT:    cset w0, ne13; CHECK-SD-NEXT:    ret14;15; CHECK-CSSC-LABEL: icmpi64:16; CHECK-CSSC:       // %bb.0: // %entry17; CHECK-CSSC-NEXT:    umin x0, x0, #118; CHECK-CSSC-NEXT:    // kill: def $w0 killed $w0 killed $x019; CHECK-CSSC-NEXT:    ret20;21entry:22  %2 = icmp ne i64 %0, 023  ret i1 %224}25 26; auto icmpi32(int x0) { return x0 != 0; }27define i1 @icmpi32(i32 noundef %0) {28; CHECK-SD-LABEL: icmpi32:29; CHECK-SD:       // %bb.0: // %entry30; CHECK-SD-NEXT:    cmp w0, #031; CHECK-SD-NEXT:    cset w0, ne32; CHECK-SD-NEXT:    ret33;34; CHECK-CSSC-LABEL: icmpi32:35; CHECK-CSSC:       // %bb.0: // %entry36; CHECK-CSSC-NEXT:    umin w0, w0, #137; CHECK-CSSC-NEXT:    ret38;39entry:40  %2 = icmp ne i32 %0, 041  ret i1 %242}43 44; auto icmpi16(short x0) { return x0 != 0; }45define i1 @icmpi16(i16 noundef %0) {46; CHECK-SD-LABEL: icmpi16:47; CHECK-SD:       // %bb.0: // %entry48; CHECK-SD-NEXT:    tst w0, #0xffff49; CHECK-SD-NEXT:    cset w0, ne50; CHECK-SD-NEXT:    ret51;52; CHECK-CSSC-LABEL: icmpi16:53; CHECK-CSSC:       // %bb.0: // %entry54; CHECK-CSSC-NEXT:    and	w8, w0, #0xffff55; CHECK-CSSC-NEXT:    umin w0, w8, #156; CHECK-CSSC-NEXT:    ret57;58entry:59  %2 = icmp ne i16 %0, 060  ret i1 %261}62 63; auto icmpi8(char x0) { return x0 != 0; }64define i1 @icmpi8(i8 noundef %0) {65; CHECK-SD-LABEL: icmpi8:66; CHECK-SD:       // %bb.0: // %entry67; CHECK-SD-NEXT:    tst w0, #0xff68; CHECK-SD-NEXT:    cset w0, ne69; CHECK-SD-NEXT:    ret70;71; CHECK-CSSC-LABEL: icmpi8:72; CHECK-CSSC:       // %bb.0: // %entry73; CHECK-CSSC-NEXT:    and w8, w0, #0xff74; CHECK-CSSC-NEXT:    umin w0, w8, #175; CHECK-CSSC-NEXT:    ret76;77entry:78  %2 = icmp ne i8 %0, 079  ret i1 %280}81 82; unsigned long icmpi64i8(char x0) { return x0 != 0; }83define i64 @icmpi64i8(i8 noundef %0) {84; CHECK-SD-LABEL: icmpi64i8:85; CHECK-SD:       // %bb.0: // %entry86; CHECK-SD-NEXT:    tst w0, #0xff87; CHECK-SD-NEXT:    cset w0, ne88; CHECK-SD-NEXT:    ret89;90; CHECK-CSSC-LABEL: icmpi64i8:91; CHECK-CSSC:       // %bb.0: // %entry92; CHECK-CSSC-NEXT:    and	w8, w0, #0xff93; CHECK-CSSC-NEXT:    umin w0, w8, #194; CHECK-CSSC-NEXT:    ret95;96entry:97  %1 = icmp ne i8 %0, 098  %2 = zext i1 %1 to i6499  ret i64 %2100}101 102; unsigned long setcc_i8_i64(char x0) { return x0 != 0; }103define i8 @setcc_i8_i64(i64 %x) {104; CHECK-SD-LABEL: setcc_i8_i64:105; CHECK-SD:       // %bb.0: // %entry106; CHECK-SD-NEXT:    cmp	x0, #0107; CHECK-SD-NEXT:    cset w0, ne108; CHECK-SD-NEXT:    ret109;110; CHECK-CSSC-LABEL: setcc_i8_i64:111; CHECK-CSSC:       // %bb.0: // %entry112; CHECK-CSSC-NEXT:    umin x0, x0, #1113; CHECK-CSSC-NEXT:    // kill: def $w0 killed $w0 killed $x0114; CHECK-CSSC-NEXT:    ret115;116entry:117  %cmp = icmp ne i64 %x, 0118  %conv = zext i1 %cmp to i8119  ret i8 %conv120}121 122; short setcc_i16_i32(int x0) { return x0 != 0; }123define i16 @setcc_i16_i32(i32 %x) {124; CHECK-SD-LABEL: setcc_i16_i32:125; CHECK-SD:       // %bb.0: // %entry126; CHECK-SD-NEXT:    cmp	w0, #0127; CHECK-SD-NEXT:    cset w0, ne128; CHECK-SD-NEXT:    ret129;130; CHECK-CSSC-LABEL: setcc_i16_i32:131; CHECK-CSSC:       // %bb.0: // %entry132; CHECK-CSSC-NEXT:    umin w0, w0, #1133; CHECK-CSSC-NEXT:    ret134;135entry:136  %cmp = icmp ne i32 %x, 0137  %conv = zext i1 %cmp to i16138  ret i16 %conv139}140 141; int setcc_i32_i64(unsigned long x0) { return x0 != 0; }142define i32 @setcc_i32_i64(i64 %x) {143; CHECK-SD-LABEL: setcc_i32_i64:144; CHECK-SD:       // %bb.0: // %entry145; CHECK-SD-NEXT:    cmp	x0, #0146; CHECK-SD-NEXT:    cset w0, ne147; CHECK-SD-NEXT:    ret148;149; CHECK-CSSC-LABEL: setcc_i32_i64:150; CHECK-CSSC:       // %bb.0: // %entry151; CHECK-CSSC-NEXT:    umin x0, x0, #1152; CHECK-CSSC-NEXT:    // kill: def $w0 killed $w0 killed $x0153; CHECK-CSSC-NEXT:    ret154;155entry:156  %cmp = icmp ne i64 %x, 0157  %conv = zext i1 %cmp to i32158  ret i32 %conv159}160 161; unsigned long setcc_i64_i64(unsigned long x0) { return x0 != 0; }162define i64 @setcc_i64_i64(i64 %x) {163; CHECK-SD-LABEL: setcc_i64_i64:164; CHECK-SD:       // %bb.0: // %entry165; CHECK-SD-NEXT:    cmp	x0, #0166; CHECK-SD-NEXT:    cset	w0, ne167; CHECK-SD-NEXT:    ret168;169; CHECK-CSSC-LABEL: setcc_i64_i64:170; CHECK-CSSC:       // %bb.0: // %entry171; CHECK-CSSC-NEXT:    umin	x0, x0, #1172; CHECK-CSSC-NEXT:    ret173;174entry:175  %cmp = icmp ne i64 %x, 0176  %conv = zext i1 %cmp to i64177  ret i64 %conv178}179 180define <2 x i1> @setcc_v2i1_v2i64(<2 x i64> %x) {181; CHECK-SD-LABEL: setcc_v2i1_v2i64:182; CHECK-SD:       // %bb.0: // %entry183; CHECK-SD-NEXT:    cmtst	v0.2d, v0.2d, v0.2d184; CHECK-SD-NEXT:    xtn	v0.2s, v0.2d185; CHECK-SD-NEXT:    ret186;187; CHECK-CSSC-LABEL: setcc_v2i1_v2i64:188; CHECK-CSSC:       // %bb.0: // %entry189; CHECK-CSSC-NEXT:    cmtst	v0.2d, v0.2d, v0.2d190; CHECK-CSSC-NEXT:    xtn	v0.2s, v0.2d191; CHECK-CSSC-NEXT:    ret192;193entry:194  %cmp = icmp ne <2 x i64> %x, zeroinitializer195  ret <2 x i1> %cmp196}197 198define <4 x i1> @setcc_v4i1_v4i32(<4 x i32> %x) {199; CHECK-SD-LABEL: setcc_v4i1_v4i32:200; CHECK-SD:       // %bb.0: // %entry201; CHECK-SD-NEXT:    cmtst	v0.4s, v0.4s, v0.4s202; CHECK-SD-NEXT:    xtn	v0.4h, v0.4s203; CHECK-SD-NEXT:    ret204;205; CHECK-CSSC-LABEL: setcc_v4i1_v4i32:206; CHECK-CSSC:       // %bb.0: // %entry207; CHECK-CSSC-NEXT:    cmtst	v0.4s, v0.4s, v0.4s208; CHECK-CSSC-NEXT:    xtn	v0.4h, v0.4s209; CHECK-CSSC-NEXT:    ret210;211entry:212  %cmp = icmp ne <4 x i32> %x, zeroinitializer213  ret <4 x i1> %cmp214}215 216define <8 x i1> @setcc_v8i1_v8i16(<8 x i16> %x) {217; CHECK-SD-LABEL: setcc_v8i1_v8i16:218; CHECK-SD:       // %bb.0: // %entry219; CHECK-SD-NEXT:    cmtst	v0.8h, v0.8h, v0.8h220; CHECK-SD-NEXT:    xtn	v0.8b, v0.8h221; CHECK-SD-NEXT:    ret222;223; CHECK-CSSC-LABEL: setcc_v8i1_v8i16:224; CHECK-CSSC:       // %bb.0: // %entry225; CHECK-CSSC-NEXT:    cmtst	v0.8h, v0.8h, v0.8h226; CHECK-CSSC-NEXT:    xtn	v0.8b, v0.8h227; CHECK-CSSC-NEXT:    ret228;229entry:230  %cmp = icmp ne <8 x i16> %x, zeroinitializer231  ret <8 x i1> %cmp232}233 234define <16 x i1> @setcc_v16i1_v16i8(<16 x i8> %x) {235; CHECK-SD-LABEL: setcc_v16i1_v16i8:236; CHECK-SD:       // %bb.0: // %entry237; CHECK-SD-NEXT:    cmtst	v0.16b, v0.16b, v0.16b238; CHECK-SD-NEXT:    ret239;240; CHECK-CSSC-LABEL: setcc_v16i1_v16i8:241; CHECK-CSSC:       // %bb.0: // %entry242; CHECK-CSSC-NEXT:    cmtst	v0.16b, v0.16b, v0.16b243; CHECK-CSSC-NEXT:    ret244;245entry:246  %cmp = icmp ne <16 x i8> %x, zeroinitializer247  ret <16 x i1> %cmp248}249 250define <2 x i8> @setcc_v2i8_v2i64(<2 x i64> %x) {251; CHECK-SD-LABEL: setcc_v2i8_v2i64:252; CHECK-SD:       // %bb.0: // %entry253; CHECK-SD-NEXT:    cmtst	v0.2d, v0.2d, v0.2d254; CHECK-SD-NEXT:    movi	v1.2s, #1255; CHECK-SD-NEXT:    xtn	v0.2s, v0.2d256; CHECK-SD-NEXT:    and	v0.8b, v0.8b, v1.8b257; CHECK-SD-NEXT:    ret258;259; CHECK-CSSC-LABEL: setcc_v2i8_v2i64:260; CHECK-CSSC:       // %bb.0: // %entry261; CHECK-CSSC-NEXT:    cmtst	v0.2d, v0.2d, v0.2d262; CHECK-CSSC-NEXT:    movi	v1.2s, #1263; CHECK-CSSC-NEXT:    xtn	v0.2s, v0.2d264; CHECK-CSSC-NEXT:    and	v0.8b, v0.8b, v1.8b265; CHECK-CSSC-NEXT:    ret266;267entry:268  %cmp = icmp ne <2 x i64> %x, zeroinitializer269  %conv = zext <2 x i1> %cmp to <2 x i8>270  ret <2 x i8> %conv271}272 273define <4 x i16> @setcc_v4i16_v4i32(<4 x i32> %x) {274; CHECK-SD-LABEL: setcc_v4i16_v4i32:275; CHECK-SD:       // %bb.0: // %entry276; CHECK-SD-NEXT:    cmtst	v0.4s, v0.4s, v0.4s277; CHECK-SD-NEXT:    movi	v1.4h, #1278; CHECK-SD-NEXT:    xtn	v0.4h, v0.4s279; CHECK-SD-NEXT:    and	v0.8b, v0.8b, v1.8b280; CHECK-SD-NEXT:    ret281;282; CHECK-CSSC-LABEL: setcc_v4i16_v4i32:283; CHECK-CSSC:       // %bb.0: // %entry284; CHECK-CSSC-NEXT:    cmtst	v0.4s, v0.4s, v0.4s285; CHECK-CSSC-NEXT:    movi	v1.4h, #1286; CHECK-CSSC-NEXT:    xtn	v0.4h, v0.4s287; CHECK-CSSC-NEXT:    and	v0.8b, v0.8b, v1.8b288; CHECK-CSSC-NEXT:    ret289;290entry:291  %cmp = icmp ne <4 x i32> %x, zeroinitializer292  %conv = zext <4 x i1> %cmp to <4 x i16>293  ret <4 x i16> %conv294}295 296define <4 x i32> @setcc_v4i32_v4i32(<4 x i32> %x) {297; CHECK-SD-LABEL: setcc_v4i32_v4i32:298; CHECK-SD:       // %bb.0: // %entry299; CHECK-SD-NEXT:    movi	v1.4s, #1300; CHECK-SD-NEXT:    cmeq	v0.4s, v0.4s, #0301; CHECK-SD-NEXT:    bic	v0.16b, v1.16b, v0.16b302; CHECK-SD-NEXT:    ret303;304; CHECK-CSSC-LABEL: setcc_v4i32_v4i32:305; CHECK-CSSC:       // %bb.0: // %entry306; CHECK-CSSC-NEXT:    movi	v1.4s, #1307; CHECK-CSSC-NEXT:    cmeq	v0.4s, v0.4s, #0308; CHECK-CSSC-NEXT:    bic	v0.16b, v1.16b, v0.16b309; CHECK-CSSC-NEXT:    ret310;311entry:312  %cmp = icmp ne <4 x i32> %x, zeroinitializer313  %conv = zext <4 x i1> %cmp to <4 x i32>314  ret <4 x i32> %conv315}316 317; auto icmpi128(int128 x0) { return x0 != 0; }318define i1 @icmpi128(i128 noundef %0) {319; CHECK-SD-LABEL: icmpi128:320; CHECK-SD:       // %bb.0: // %entry321; CHECK-SD-NEXT:    orr	x8, x0, x1322; CHECK-SD-NEXT:    cmp	x8, #0323; CHECK-SD-NEXT:    cset w0, ne324; CHECK-SD-NEXT:    ret325;326; CHECK-CSSC-LABEL: icmpi128:327; CHECK-CSSC:       // %bb.0: // %entry328; CHECK-CSSC-NEXT:    orr	x8, x0, x1329; CHECK-CSSC-NEXT:    umin	x0, x8, #1330; CHECK-CSSC-NEXT:    // kill: def $w0 killed $w0 killed $x0331; CHECK-CSSC-NEXT:    ret332;333entry:334  %2 = icmp ne i128 %0, 0335  ret i1 %2336}337