172 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=armv7a < %s | FileCheck %s --check-prefix=ARM3; RUN: llc -mtriple=armv6m < %s | FileCheck %s --check-prefix=THUMB4; RUN: llc -mtriple=armv7m < %s | FileCheck %s --check-prefix=THUMB25; RUN: llc -mtriple=thumbv8.1m.main < %s | FileCheck %s --check-prefix=THUMBV86 7define i3 @sign_i3(i3 %a) {8; ARM-LABEL: sign_i3:9; ARM: @ %bb.0:10; ARM-NEXT: lsl r0, r0, #2911; ARM-NEXT: mov r1, #112; ARM-NEXT: orr r0, r1, r0, asr #3113; ARM-NEXT: bx lr14;15; THUMB-LABEL: sign_i3:16; THUMB: @ %bb.0:17; THUMB-NEXT: lsls r0, r0, #2918; THUMB-NEXT: asrs r1, r0, #3119; THUMB-NEXT: movs r0, #120; THUMB-NEXT: orrs r0, r121; THUMB-NEXT: bx lr22;23; THUMB2-LABEL: sign_i3:24; THUMB2: @ %bb.0:25; THUMB2-NEXT: lsls r0, r0, #2926; THUMB2-NEXT: movs r1, #127; THUMB2-NEXT: orr.w r0, r1, r0, asr #3128; THUMB2-NEXT: bx lr29;30; THUMBV8-LABEL: sign_i3:31; THUMBV8: @ %bb.0:32; THUMBV8-NEXT: lsls r0, r0, #2933; THUMBV8-NEXT: movs r1, #134; THUMBV8-NEXT: orr.w r0, r1, r0, asr #3135; THUMBV8-NEXT: bx lr36 %c = icmp sgt i3 %a, -137 %res = select i1 %c, i3 1, i3 -138 ret i3 %res39}40 41define i4 @sign_i4(i4 %a) {42; ARM-LABEL: sign_i4:43; ARM: @ %bb.0:44; ARM-NEXT: lsl r0, r0, #2845; ARM-NEXT: mov r1, #146; ARM-NEXT: orr r0, r1, r0, asr #3147; ARM-NEXT: bx lr48;49; THUMB-LABEL: sign_i4:50; THUMB: @ %bb.0:51; THUMB-NEXT: lsls r0, r0, #2852; THUMB-NEXT: asrs r1, r0, #3153; THUMB-NEXT: movs r0, #154; THUMB-NEXT: orrs r0, r155; THUMB-NEXT: bx lr56;57; THUMB2-LABEL: sign_i4:58; THUMB2: @ %bb.0:59; THUMB2-NEXT: lsls r0, r0, #2860; THUMB2-NEXT: movs r1, #161; THUMB2-NEXT: orr.w r0, r1, r0, asr #3162; THUMB2-NEXT: bx lr63;64; THUMBV8-LABEL: sign_i4:65; THUMBV8: @ %bb.0:66; THUMBV8-NEXT: lsls r0, r0, #2867; THUMBV8-NEXT: movs r1, #168; THUMBV8-NEXT: orr.w r0, r1, r0, asr #3169; THUMBV8-NEXT: bx lr70 %c = icmp sgt i4 %a, -171 %res = select i1 %c, i4 1, i4 -172 ret i4 %res73}74 75define i8 @sign_i8(i8 %a) {76; ARM-LABEL: sign_i8:77; ARM: @ %bb.0:78; ARM-NEXT: sxtb r0, r079; ARM-NEXT: mov r1, #180; ARM-NEXT: orr r0, r1, r0, asr #781; ARM-NEXT: bx lr82;83; THUMB-LABEL: sign_i8:84; THUMB: @ %bb.0:85; THUMB-NEXT: sxtb r0, r086; THUMB-NEXT: asrs r1, r0, #787; THUMB-NEXT: movs r0, #188; THUMB-NEXT: orrs r0, r189; THUMB-NEXT: bx lr90;91; THUMB2-LABEL: sign_i8:92; THUMB2: @ %bb.0:93; THUMB2-NEXT: sxtb r0, r094; THUMB2-NEXT: movs r1, #195; THUMB2-NEXT: orr.w r0, r1, r0, asr #796; THUMB2-NEXT: bx lr97;98; THUMBV8-LABEL: sign_i8:99; THUMBV8: @ %bb.0:100; THUMBV8-NEXT: sxtb r0, r0101; THUMBV8-NEXT: movs r1, #1102; THUMBV8-NEXT: orr.w r0, r1, r0, asr #7103; THUMBV8-NEXT: bx lr104 %c = icmp sgt i8 %a, -1105 %res = select i1 %c, i8 1, i8 -1106 ret i8 %res107}108 109define i16 @sign_i16(i16 %a) {110; ARM-LABEL: sign_i16:111; ARM: @ %bb.0:112; ARM-NEXT: sxth r0, r0113; ARM-NEXT: mov r1, #1114; ARM-NEXT: orr r0, r1, r0, asr #15115; ARM-NEXT: bx lr116;117; THUMB-LABEL: sign_i16:118; THUMB: @ %bb.0:119; THUMB-NEXT: sxth r0, r0120; THUMB-NEXT: asrs r1, r0, #15121; THUMB-NEXT: movs r0, #1122; THUMB-NEXT: orrs r0, r1123; THUMB-NEXT: bx lr124;125; THUMB2-LABEL: sign_i16:126; THUMB2: @ %bb.0:127; THUMB2-NEXT: sxth r0, r0128; THUMB2-NEXT: movs r1, #1129; THUMB2-NEXT: orr.w r0, r1, r0, asr #15130; THUMB2-NEXT: bx lr131;132; THUMBV8-LABEL: sign_i16:133; THUMBV8: @ %bb.0:134; THUMBV8-NEXT: sxth r0, r0135; THUMBV8-NEXT: movs r1, #1136; THUMBV8-NEXT: orr.w r0, r1, r0, asr #15137; THUMBV8-NEXT: bx lr138 %c = icmp sgt i16 %a, -1139 %res = select i1 %c, i16 1, i16 -1140 ret i16 %res141}142 143define i32 @sign_i32(i32 %a) {144; ARM-LABEL: sign_i32:145; ARM: @ %bb.0:146; ARM-NEXT: mov r1, #1147; ARM-NEXT: orr r0, r1, r0, asr #31148; ARM-NEXT: bx lr149;150; THUMB-LABEL: sign_i32:151; THUMB: @ %bb.0:152; THUMB-NEXT: asrs r1, r0, #31153; THUMB-NEXT: movs r0, #1154; THUMB-NEXT: orrs r0, r1155; THUMB-NEXT: bx lr156;157; THUMB2-LABEL: sign_i32:158; THUMB2: @ %bb.0:159; THUMB2-NEXT: movs r1, #1160; THUMB2-NEXT: orr.w r0, r1, r0, asr #31161; THUMB2-NEXT: bx lr162;163; THUMBV8-LABEL: sign_i32:164; THUMBV8: @ %bb.0:165; THUMBV8-NEXT: movs r1, #1166; THUMBV8-NEXT: orr.w r0, r1, r0, asr #31167; THUMBV8-NEXT: bx lr168 %c = icmp sgt i32 %a, -1169 %res = select i1 %c, i32 1, i32 -1170 ret i32 %res171}172