1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X64 3; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -verify-machineinstrs -mattr=+avx512f | FileCheck %s --check-prefix=SDAG-X64 4; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64 5; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs -mattr=+avx512f | FileCheck %s --check-prefix=FAST-X64 6; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=GISEL-X64 7; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs -mattr=+avx512f | FileCheck %s --check-prefix=GISEL-X64 8 9; RUN: llc < %s -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X86 10; RUN: llc < %s -mtriple=i686-apple-darwin10 -verify-machineinstrs -mattr=+cmov | FileCheck %s --check-prefix=SDAG-X86-CMOV 11; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X86 12; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=i686-apple-darwin10 -verify-machineinstrs -mattr=+cmov | FileCheck %s --check-prefix=FAST-X86-CMOV 13; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=GISEL-X86 14; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -verify-machineinstrs -mattr=+cmov | FileCheck %s --check-prefix=GISEL-X86-CMOV 15 16; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs -mattr=+ndd | FileCheck %s --check-prefix=NDD 17 18; Test conditional move for the supported types (i16, i32, and i32) and 19; conditon input (argument or cmp). 20; When cmov is not available (i8 type or X86), the branch is expected. 21 22define zeroext i8 @select_cmov_i8(i1 zeroext %cond, i8 zeroext %a, i8 zeroext %b) { 23; SDAG-X64-LABEL: select_cmov_i8: 24; SDAG-X64: ## %bb.0: 25; SDAG-X64-NEXT: movl %esi, %eax 26; SDAG-X64-NEXT: testl %edi, %edi 27; SDAG-X64-NEXT: cmovel %edx, %eax 28; SDAG-X64-NEXT: retq 29; 30; FAST-X64-LABEL: select_cmov_i8: 31; FAST-X64: ## %bb.0: 32; FAST-X64-NEXT: testb $1, %dil 33; FAST-X64-NEXT: jne LBB0_2 34; FAST-X64-NEXT: ## %bb.1: 35; FAST-X64-NEXT: movl %edx, %esi 36; FAST-X64-NEXT: LBB0_2: 37; FAST-X64-NEXT: movzbl %sil, %eax 38; FAST-X64-NEXT: retq 39; 40; GISEL-X64-LABEL: select_cmov_i8: 41; GISEL-X64: ## %bb.0: 42; GISEL-X64-NEXT: movl %edx, %eax 43; GISEL-X64-NEXT: testl %edi, %edi 44; GISEL-X64-NEXT: cmovnew %si, %ax 45; GISEL-X64-NEXT: ## kill: def $al killed $al killed $eax 46; GISEL-X64-NEXT: retq 47; 48; SDAG-X86-LABEL: select_cmov_i8: 49; SDAG-X86: ## %bb.0: 50; SDAG-X86-NEXT: cmpb $0, {{[0-9]+}}(%esp) 51; SDAG-X86-NEXT: jne LBB0_1 52; SDAG-X86-NEXT: ## %bb.2: 53; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %eax 54; SDAG-X86-NEXT: movzbl (%eax), %eax 55; SDAG-X86-NEXT: retl 56; SDAG-X86-NEXT: LBB0_1: 57; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %eax 58; SDAG-X86-NEXT: movzbl (%eax), %eax 59; SDAG-X86-NEXT: retl 60; 61; SDAG-X86-CMOV-LABEL: select_cmov_i8: 62; SDAG-X86-CMOV: ## %bb.0: 63; SDAG-X86-CMOV-NEXT: cmpb $0, {{[0-9]+}}(%esp) 64; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %eax 65; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %ecx 66; SDAG-X86-CMOV-NEXT: cmovnel %eax, %ecx 67; SDAG-X86-CMOV-NEXT: movzbl (%ecx), %eax 68; SDAG-X86-CMOV-NEXT: retl 69; 70; FAST-X86-LABEL: select_cmov_i8: 71; FAST-X86: ## %bb.0: 72; FAST-X86-NEXT: testb $1, {{[0-9]+}}(%esp) 73; FAST-X86-NEXT: jne LBB0_1 74; FAST-X86-NEXT: ## %bb.2: 75; FAST-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 76; FAST-X86-NEXT: movzbl %al, %eax 77; FAST-X86-NEXT: retl 78; FAST-X86-NEXT: LBB0_1: 79; FAST-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 80; FAST-X86-NEXT: movzbl %al, %eax 81; FAST-X86-NEXT: retl 82; 83; FAST-X86-CMOV-LABEL: select_cmov_i8: 84; FAST-X86-CMOV: ## %bb.0: 85; FAST-X86-CMOV-NEXT: testb $1, {{[0-9]+}}(%esp) 86; FAST-X86-CMOV-NEXT: jne LBB0_1 87; FAST-X86-CMOV-NEXT: ## %bb.2: 88; FAST-X86-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax 89; FAST-X86-CMOV-NEXT: movzbl %al, %eax 90; FAST-X86-CMOV-NEXT: retl 91; FAST-X86-CMOV-NEXT: LBB0_1: 92; FAST-X86-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax 93; FAST-X86-CMOV-NEXT: movzbl %al, %eax 94; FAST-X86-CMOV-NEXT: retl 95; 96; GISEL-X86-LABEL: select_cmov_i8: 97; GISEL-X86: ## %bb.0: 98; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 99; GISEL-X86-NEXT: testl %eax, %eax 100; GISEL-X86-NEXT: je LBB0_1 101; GISEL-X86-NEXT: ## %bb.2: 102; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 103; GISEL-X86-NEXT: ## kill: def $al killed $al killed $eax 104; GISEL-X86-NEXT: retl 105; GISEL-X86-NEXT: LBB0_1: 106; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 107; GISEL-X86-NEXT: ## kill: def $al killed $al killed $eax 108; GISEL-X86-NEXT: retl 109; 110; GISEL-X86-CMOV-LABEL: select_cmov_i8: 111; GISEL-X86-CMOV: ## %bb.0: 112; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 113; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 114; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 115; GISEL-X86-CMOV-NEXT: testl %ecx, %ecx 116; GISEL-X86-CMOV-NEXT: cmovnew %dx, %ax 117; GISEL-X86-CMOV-NEXT: ## kill: def $al killed $al killed $eax 118; GISEL-X86-CMOV-NEXT: retl 119; 120; NDD-LABEL: select_cmov_i8: 121; NDD: ## %bb.0: 122; NDD-NEXT: testb $1, %dil 123; NDD-NEXT: jne LBB0_2 124; NDD-NEXT: ## %bb.1: 125; NDD-NEXT: movl %edx, %esi 126; NDD-NEXT: LBB0_2: 127; NDD-NEXT: movzbl %sil, %eax 128; NDD-NEXT: retq 129 %1 = select i1 %cond, i8 %a, i8 %b 130 ret i8 %1 131} 132 133define zeroext i16 @select_cmov_i16(i1 zeroext %cond, i16 zeroext %a, i16 zeroext %b) { 134; SDAG-X64-LABEL: select_cmov_i16: 135; SDAG-X64: ## %bb.0: 136; SDAG-X64-NEXT: movl %esi, %eax 137; SDAG-X64-NEXT: testl %edi, %edi 138; SDAG-X64-NEXT: cmovel %edx, %eax 139; SDAG-X64-NEXT: retq 140; 141; FAST-X64-LABEL: select_cmov_i16: 142; FAST-X64: ## %bb.0: 143; FAST-X64-NEXT: testb $1, %dil 144; FAST-X64-NEXT: cmovew %dx, %si 145; FAST-X64-NEXT: movzwl %si, %eax 146; FAST-X64-NEXT: retq 147; 148; GISEL-X64-LABEL: select_cmov_i16: 149; GISEL-X64: ## %bb.0: 150; GISEL-X64-NEXT: movl %edx, %eax 151; GISEL-X64-NEXT: testl %edi, %edi 152; GISEL-X64-NEXT: cmovnew %si, %ax 153; GISEL-X64-NEXT: ## kill: def $ax killed $ax killed $eax 154; GISEL-X64-NEXT: retq 155; 156; SDAG-X86-LABEL: select_cmov_i16: 157; SDAG-X86: ## %bb.0: 158; SDAG-X86-NEXT: cmpb $0, {{[0-9]+}}(%esp) 159; SDAG-X86-NEXT: jne LBB1_1 160; SDAG-X86-NEXT: ## %bb.2: 161; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %eax 162; SDAG-X86-NEXT: movzwl (%eax), %eax 163; SDAG-X86-NEXT: retl 164; SDAG-X86-NEXT: LBB1_1: 165; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %eax 166; SDAG-X86-NEXT: movzwl (%eax), %eax 167; SDAG-X86-NEXT: retl 168; 169; SDAG-X86-CMOV-LABEL: select_cmov_i16: 170; SDAG-X86-CMOV: ## %bb.0: 171; SDAG-X86-CMOV-NEXT: cmpb $0, {{[0-9]+}}(%esp) 172; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %eax 173; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %ecx 174; SDAG-X86-CMOV-NEXT: cmovnel %eax, %ecx 175; SDAG-X86-CMOV-NEXT: movzwl (%ecx), %eax 176; SDAG-X86-CMOV-NEXT: retl 177; 178; FAST-X86-LABEL: select_cmov_i16: 179; FAST-X86: ## %bb.0: 180; FAST-X86-NEXT: testb $1, {{[0-9]+}}(%esp) 181; FAST-X86-NEXT: jne LBB1_1 182; FAST-X86-NEXT: ## %bb.2: 183; FAST-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 184; FAST-X86-NEXT: movzwl %ax, %eax 185; FAST-X86-NEXT: retl 186; FAST-X86-NEXT: LBB1_1: 187; FAST-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 188; FAST-X86-NEXT: movzwl %ax, %eax 189; FAST-X86-NEXT: retl 190; 191; FAST-X86-CMOV-LABEL: select_cmov_i16: 192; FAST-X86-CMOV: ## %bb.0: 193; FAST-X86-CMOV-NEXT: movzwl {{[0-9]+}}(%esp), %eax 194; FAST-X86-CMOV-NEXT: testb $1, {{[0-9]+}}(%esp) 195; FAST-X86-CMOV-NEXT: cmovew {{[0-9]+}}(%esp), %ax 196; FAST-X86-CMOV-NEXT: movzwl %ax, %eax 197; FAST-X86-CMOV-NEXT: retl 198; 199; GISEL-X86-LABEL: select_cmov_i16: 200; GISEL-X86: ## %bb.0: 201; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 202; GISEL-X86-NEXT: testl %eax, %eax 203; GISEL-X86-NEXT: je LBB1_1 204; GISEL-X86-NEXT: ## %bb.2: 205; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 206; GISEL-X86-NEXT: ## kill: def $ax killed $ax killed $eax 207; GISEL-X86-NEXT: retl 208; GISEL-X86-NEXT: LBB1_1: 209; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 210; GISEL-X86-NEXT: ## kill: def $ax killed $ax killed $eax 211; GISEL-X86-NEXT: retl 212; 213; GISEL-X86-CMOV-LABEL: select_cmov_i16: 214; GISEL-X86-CMOV: ## %bb.0: 215; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 216; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 217; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 218; GISEL-X86-CMOV-NEXT: testl %ecx, %ecx 219; GISEL-X86-CMOV-NEXT: cmovnew %dx, %ax 220; GISEL-X86-CMOV-NEXT: ## kill: def $ax killed $ax killed $eax 221; GISEL-X86-CMOV-NEXT: retl 222; 223; NDD-LABEL: select_cmov_i16: 224; NDD: ## %bb.0: 225; NDD-NEXT: testb $1, %dil 226; NDD-NEXT: cmovnew %si, %dx, %ax 227; NDD-NEXT: movzwl %ax, %eax 228; NDD-NEXT: retq 229 %1 = select i1 %cond, i16 %a, i16 %b 230 ret i16 %1 231} 232 233define zeroext i16 @select_cmp_cmov_i16(i16 zeroext %a, i16 zeroext %b) { 234; SDAG-X64-LABEL: select_cmp_cmov_i16: 235; SDAG-X64: ## %bb.0: 236; SDAG-X64-NEXT: movl %esi, %eax 237; SDAG-X64-NEXT: cmpw %ax, %di 238; SDAG-X64-NEXT: cmovbl %edi, %eax 239; SDAG-X64-NEXT: retq 240; 241; FAST-X64-LABEL: select_cmp_cmov_i16: 242; FAST-X64: ## %bb.0: 243; FAST-X64-NEXT: cmpw %si, %di 244; FAST-X64-NEXT: cmovbw %di, %si 245; FAST-X64-NEXT: movzwl %si, %eax 246; FAST-X64-NEXT: retq 247; 248; GISEL-X64-LABEL: select_cmp_cmov_i16: 249; GISEL-X64: ## %bb.0: 250; GISEL-X64-NEXT: movl %edi, %eax 251; GISEL-X64-NEXT: xorl %ecx, %ecx 252; GISEL-X64-NEXT: cmpw %si, %ax 253; GISEL-X64-NEXT: setb %cl 254; GISEL-X64-NEXT: andl $1, %ecx 255; GISEL-X64-NEXT: cmovew %si, %ax 256; GISEL-X64-NEXT: ## kill: def $ax killed $ax killed $eax 257; GISEL-X64-NEXT: retq 258; 259; SDAG-X86-LABEL: select_cmp_cmov_i16: 260; SDAG-X86: ## %bb.0: 261; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 262; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 263; SDAG-X86-NEXT: cmpw %cx, %ax 264; SDAG-X86-NEXT: jb LBB2_2 265; SDAG-X86-NEXT: ## %bb.1: 266; SDAG-X86-NEXT: movl %ecx, %eax 267; SDAG-X86-NEXT: LBB2_2: 268; SDAG-X86-NEXT: movzwl %ax, %eax 269; SDAG-X86-NEXT: retl 270; 271; SDAG-X86-CMOV-LABEL: select_cmp_cmov_i16: 272; SDAG-X86-CMOV: ## %bb.0: 273; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 274; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 275; SDAG-X86-CMOV-NEXT: cmpw %ax, %cx 276; SDAG-X86-CMOV-NEXT: cmovbl %ecx, %eax 277; SDAG-X86-CMOV-NEXT: movzwl %ax, %eax 278; SDAG-X86-CMOV-NEXT: retl 279; 280; FAST-X86-LABEL: select_cmp_cmov_i16: 281; FAST-X86: ## %bb.0: 282; FAST-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx 283; FAST-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 284; FAST-X86-NEXT: cmpw %cx, %ax 285; FAST-X86-NEXT: jb LBB2_2 286; FAST-X86-NEXT: ## %bb.1: 287; FAST-X86-NEXT: movl %ecx, %eax 288; FAST-X86-NEXT: LBB2_2: 289; FAST-X86-NEXT: movzwl %ax, %eax 290; FAST-X86-NEXT: retl 291; 292; FAST-X86-CMOV-LABEL: select_cmp_cmov_i16: 293; FAST-X86-CMOV: ## %bb.0: 294; FAST-X86-CMOV-NEXT: movzwl {{[0-9]+}}(%esp), %eax 295; FAST-X86-CMOV-NEXT: movzwl {{[0-9]+}}(%esp), %ecx 296; FAST-X86-CMOV-NEXT: cmpw %ax, %cx 297; FAST-X86-CMOV-NEXT: cmovbw %cx, %ax 298; FAST-X86-CMOV-NEXT: movzwl %ax, %eax 299; FAST-X86-CMOV-NEXT: retl 300; 301; GISEL-X86-LABEL: select_cmp_cmov_i16: 302; GISEL-X86: ## %bb.0: 303; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 304; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 305; GISEL-X86-NEXT: xorl %edx, %edx 306; GISEL-X86-NEXT: cmpw %ax, %cx 307; GISEL-X86-NEXT: setb %dl 308; GISEL-X86-NEXT: andl $1, %edx 309; GISEL-X86-NEXT: je LBB2_2 310; GISEL-X86-NEXT: ## %bb.1: 311; GISEL-X86-NEXT: movl %ecx, %eax 312; GISEL-X86-NEXT: LBB2_2: 313; GISEL-X86-NEXT: ## kill: def $ax killed $ax killed $eax 314; GISEL-X86-NEXT: retl 315; 316; GISEL-X86-CMOV-LABEL: select_cmp_cmov_i16: 317; GISEL-X86-CMOV: ## %bb.0: 318; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 319; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 320; GISEL-X86-CMOV-NEXT: xorl %edx, %edx 321; GISEL-X86-CMOV-NEXT: cmpw %cx, %ax 322; GISEL-X86-CMOV-NEXT: setb %dl 323; GISEL-X86-CMOV-NEXT: andl $1, %edx 324; GISEL-X86-CMOV-NEXT: cmovew %cx, %ax 325; GISEL-X86-CMOV-NEXT: ## kill: def $ax killed $ax killed $eax 326; GISEL-X86-CMOV-NEXT: retl 327; 328; NDD-LABEL: select_cmp_cmov_i16: 329; NDD: ## %bb.0: 330; NDD-NEXT: cmpw %si, %di 331; NDD-NEXT: cmovbw %di, %si, %ax 332; NDD-NEXT: movzwl %ax, %eax 333; NDD-NEXT: retq 334 %1 = icmp ult i16 %a, %b 335 %2 = select i1 %1, i16 %a, i16 %b 336 ret i16 %2 337} 338 339define i32 @select_cmov_i32(i1 zeroext %cond, i32 %a, i32 %b) { 340; SDAG-X64-LABEL: select_cmov_i32: 341; SDAG-X64: ## %bb.0: 342; SDAG-X64-NEXT: movl %esi, %eax 343; SDAG-X64-NEXT: testl %edi, %edi 344; SDAG-X64-NEXT: cmovel %edx, %eax 345; SDAG-X64-NEXT: retq 346; 347; FAST-X64-LABEL: select_cmov_i32: 348; FAST-X64: ## %bb.0: 349; FAST-X64-NEXT: movl %esi, %eax 350; FAST-X64-NEXT: testb $1, %dil 351; FAST-X64-NEXT: cmovel %edx, %eax 352; FAST-X64-NEXT: retq 353; 354; GISEL-X64-LABEL: select_cmov_i32: 355; GISEL-X64: ## %bb.0: 356; GISEL-X64-NEXT: movl %edx, %eax 357; GISEL-X64-NEXT: testl %edi, %edi 358; GISEL-X64-NEXT: cmovnel %esi, %eax 359; GISEL-X64-NEXT: retq 360; 361; SDAG-X86-LABEL: select_cmov_i32: 362; SDAG-X86: ## %bb.0: 363; SDAG-X86-NEXT: cmpb $0, {{[0-9]+}}(%esp) 364; SDAG-X86-NEXT: jne LBB3_1 365; SDAG-X86-NEXT: ## %bb.2: 366; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %eax 367; SDAG-X86-NEXT: movl (%eax), %eax 368; SDAG-X86-NEXT: retl 369; SDAG-X86-NEXT: LBB3_1: 370; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %eax 371; SDAG-X86-NEXT: movl (%eax), %eax 372; SDAG-X86-NEXT: retl 373; 374; SDAG-X86-CMOV-LABEL: select_cmov_i32: 375; SDAG-X86-CMOV: ## %bb.0: 376; SDAG-X86-CMOV-NEXT: cmpb $0, {{[0-9]+}}(%esp) 377; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %eax 378; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %ecx 379; SDAG-X86-CMOV-NEXT: cmovnel %eax, %ecx 380; SDAG-X86-CMOV-NEXT: movl (%ecx), %eax 381; SDAG-X86-CMOV-NEXT: retl 382; 383; FAST-X86-LABEL: select_cmov_i32: 384; FAST-X86: ## %bb.0: 385; FAST-X86-NEXT: testb $1, {{[0-9]+}}(%esp) 386; FAST-X86-NEXT: jne LBB3_1 387; FAST-X86-NEXT: ## %bb.2: 388; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 389; FAST-X86-NEXT: retl 390; FAST-X86-NEXT: LBB3_1: 391; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 392; FAST-X86-NEXT: retl 393; 394; FAST-X86-CMOV-LABEL: select_cmov_i32: 395; FAST-X86-CMOV: ## %bb.0: 396; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 397; FAST-X86-CMOV-NEXT: testb $1, {{[0-9]+}}(%esp) 398; FAST-X86-CMOV-NEXT: cmovel {{[0-9]+}}(%esp), %eax 399; FAST-X86-CMOV-NEXT: retl 400; 401; GISEL-X86-LABEL: select_cmov_i32: 402; GISEL-X86: ## %bb.0: 403; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 404; GISEL-X86-NEXT: testl %eax, %eax 405; GISEL-X86-NEXT: je LBB3_1 406; GISEL-X86-NEXT: ## %bb.2: 407; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 408; GISEL-X86-NEXT: retl 409; GISEL-X86-NEXT: LBB3_1: 410; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 411; GISEL-X86-NEXT: retl 412; 413; GISEL-X86-CMOV-LABEL: select_cmov_i32: 414; GISEL-X86-CMOV: ## %bb.0: 415; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 416; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 417; GISEL-X86-CMOV-NEXT: testl %ecx, %ecx 418; GISEL-X86-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %eax 419; GISEL-X86-CMOV-NEXT: retl 420; 421; NDD-LABEL: select_cmov_i32: 422; NDD: ## %bb.0: 423; NDD-NEXT: testb $1, %dil 424; NDD-NEXT: cmovnel %esi, %edx, %eax 425; NDD-NEXT: retq 426 %1 = select i1 %cond, i32 %a, i32 %b 427 ret i32 %1 428} 429 430define i32 @select_cmp_cmov_i32(i32 %a, i32 %b) { 431; SDAG-X64-LABEL: select_cmp_cmov_i32: 432; SDAG-X64: ## %bb.0: 433; SDAG-X64-NEXT: movl %esi, %eax 434; SDAG-X64-NEXT: cmpl %esi, %edi 435; SDAG-X64-NEXT: cmovbl %edi, %eax 436; SDAG-X64-NEXT: retq 437; 438; FAST-X64-LABEL: select_cmp_cmov_i32: 439; FAST-X64: ## %bb.0: 440; FAST-X64-NEXT: movl %esi, %eax 441; FAST-X64-NEXT: cmpl %esi, %edi 442; FAST-X64-NEXT: cmovbl %edi, %eax 443; FAST-X64-NEXT: retq 444; 445; GISEL-X64-LABEL: select_cmp_cmov_i32: 446; GISEL-X64: ## %bb.0: 447; GISEL-X64-NEXT: movl %edi, %eax 448; GISEL-X64-NEXT: xorl %ecx, %ecx 449; GISEL-X64-NEXT: cmpl %esi, %edi 450; GISEL-X64-NEXT: setb %cl 451; GISEL-X64-NEXT: andl $1, %ecx 452; GISEL-X64-NEXT: cmovel %esi, %eax 453; GISEL-X64-NEXT: retq 454; 455; SDAG-X86-LABEL: select_cmp_cmov_i32: 456; SDAG-X86: ## %bb.0: 457; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 458; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 459; SDAG-X86-NEXT: cmpl %ecx, %eax 460; SDAG-X86-NEXT: jb LBB4_2 461; SDAG-X86-NEXT: ## %bb.1: 462; SDAG-X86-NEXT: movl %ecx, %eax 463; SDAG-X86-NEXT: LBB4_2: 464; SDAG-X86-NEXT: retl 465; 466; SDAG-X86-CMOV-LABEL: select_cmp_cmov_i32: 467; SDAG-X86-CMOV: ## %bb.0: 468; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 469; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 470; SDAG-X86-CMOV-NEXT: cmpl %eax, %ecx 471; SDAG-X86-CMOV-NEXT: cmovbl %ecx, %eax 472; SDAG-X86-CMOV-NEXT: retl 473; 474; FAST-X86-LABEL: select_cmp_cmov_i32: 475; FAST-X86: ## %bb.0: 476; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 477; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 478; FAST-X86-NEXT: cmpl %ecx, %eax 479; FAST-X86-NEXT: jb LBB4_2 480; FAST-X86-NEXT: ## %bb.1: 481; FAST-X86-NEXT: movl %ecx, %eax 482; FAST-X86-NEXT: LBB4_2: 483; FAST-X86-NEXT: retl 484; 485; FAST-X86-CMOV-LABEL: select_cmp_cmov_i32: 486; FAST-X86-CMOV: ## %bb.0: 487; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 488; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 489; FAST-X86-CMOV-NEXT: cmpl %eax, %ecx 490; FAST-X86-CMOV-NEXT: cmovbl %ecx, %eax 491; FAST-X86-CMOV-NEXT: retl 492; 493; GISEL-X86-LABEL: select_cmp_cmov_i32: 494; GISEL-X86: ## %bb.0: 495; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 496; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 497; GISEL-X86-NEXT: xorl %edx, %edx 498; GISEL-X86-NEXT: cmpl %eax, %ecx 499; GISEL-X86-NEXT: setb %dl 500; GISEL-X86-NEXT: andl $1, %edx 501; GISEL-X86-NEXT: je LBB4_2 502; GISEL-X86-NEXT: ## %bb.1: 503; GISEL-X86-NEXT: movl %ecx, %eax 504; GISEL-X86-NEXT: LBB4_2: 505; GISEL-X86-NEXT: retl 506; 507; GISEL-X86-CMOV-LABEL: select_cmp_cmov_i32: 508; GISEL-X86-CMOV: ## %bb.0: 509; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 510; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 511; GISEL-X86-CMOV-NEXT: xorl %edx, %edx 512; GISEL-X86-CMOV-NEXT: cmpl %ecx, %eax 513; GISEL-X86-CMOV-NEXT: setb %dl 514; GISEL-X86-CMOV-NEXT: andl $1, %edx 515; GISEL-X86-CMOV-NEXT: cmovel %ecx, %eax 516; GISEL-X86-CMOV-NEXT: retl 517; 518; NDD-LABEL: select_cmp_cmov_i32: 519; NDD: ## %bb.0: 520; NDD-NEXT: cmpl %esi, %edi 521; NDD-NEXT: cmovbl %edi, %esi, %eax 522; NDD-NEXT: retq 523 %1 = icmp ult i32 %a, %b 524 %2 = select i1 %1, i32 %a, i32 %b 525 ret i32 %2 526} 527 528define i64 @select_cmov_i64(i1 zeroext %cond, i64 %a, i64 %b) { 529; SDAG-X64-LABEL: select_cmov_i64: 530; SDAG-X64: ## %bb.0: 531; SDAG-X64-NEXT: movq %rsi, %rax 532; SDAG-X64-NEXT: testl %edi, %edi 533; SDAG-X64-NEXT: cmoveq %rdx, %rax 534; SDAG-X64-NEXT: retq 535; 536; FAST-X64-LABEL: select_cmov_i64: 537; FAST-X64: ## %bb.0: 538; FAST-X64-NEXT: movq %rsi, %rax 539; FAST-X64-NEXT: testb $1, %dil 540; FAST-X64-NEXT: cmoveq %rdx, %rax 541; FAST-X64-NEXT: retq 542; 543; GISEL-X64-LABEL: select_cmov_i64: 544; GISEL-X64: ## %bb.0: 545; GISEL-X64-NEXT: movq %rdx, %rax 546; GISEL-X64-NEXT: testl %edi, %edi 547; GISEL-X64-NEXT: cmovneq %rsi, %rax 548; GISEL-X64-NEXT: retq 549; 550; SDAG-X86-LABEL: select_cmov_i64: 551; SDAG-X86: ## %bb.0: 552; SDAG-X86-NEXT: cmpb $0, {{[0-9]+}}(%esp) 553; SDAG-X86-NEXT: jne LBB5_1 554; SDAG-X86-NEXT: ## %bb.2: 555; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %ecx 556; SDAG-X86-NEXT: jmp LBB5_3 557; SDAG-X86-NEXT: LBB5_1: 558; SDAG-X86-NEXT: leal {{[0-9]+}}(%esp), %ecx 559; SDAG-X86-NEXT: LBB5_3: 560; SDAG-X86-NEXT: movl (%ecx), %eax 561; SDAG-X86-NEXT: movl 4(%ecx), %edx 562; SDAG-X86-NEXT: retl 563; 564; SDAG-X86-CMOV-LABEL: select_cmov_i64: 565; SDAG-X86-CMOV: ## %bb.0: 566; SDAG-X86-CMOV-NEXT: cmpb $0, {{[0-9]+}}(%esp) 567; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %eax 568; SDAG-X86-CMOV-NEXT: leal {{[0-9]+}}(%esp), %ecx 569; SDAG-X86-CMOV-NEXT: cmovnel %eax, %ecx 570; SDAG-X86-CMOV-NEXT: movl (%ecx), %eax 571; SDAG-X86-CMOV-NEXT: movl 4(%ecx), %edx 572; SDAG-X86-CMOV-NEXT: retl 573; 574; FAST-X86-LABEL: select_cmov_i64: 575; FAST-X86: ## %bb.0: 576; FAST-X86-NEXT: cmpb $0, {{[0-9]+}}(%esp) 577; FAST-X86-NEXT: jne LBB5_1 578; FAST-X86-NEXT: ## %bb.2: 579; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 580; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 581; FAST-X86-NEXT: retl 582; FAST-X86-NEXT: LBB5_1: 583; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 584; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 585; FAST-X86-NEXT: retl 586; 587; FAST-X86-CMOV-LABEL: select_cmov_i64: 588; FAST-X86-CMOV: ## %bb.0: 589; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 590; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 591; FAST-X86-CMOV-NEXT: cmpb $0, {{[0-9]+}}(%esp) 592; FAST-X86-CMOV-NEXT: cmovel {{[0-9]+}}(%esp), %eax 593; FAST-X86-CMOV-NEXT: cmovel {{[0-9]+}}(%esp), %edx 594; FAST-X86-CMOV-NEXT: retl 595; 596; GISEL-X86-LABEL: select_cmov_i64: 597; GISEL-X86: ## %bb.0: 598; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 599; GISEL-X86-NEXT: testl %ecx, %ecx 600; GISEL-X86-NEXT: je LBB5_1 601; GISEL-X86-NEXT: ## %bb.2: 602; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 603; GISEL-X86-NEXT: testl %ecx, %ecx 604; GISEL-X86-NEXT: jne LBB5_5 605; GISEL-X86-NEXT: LBB5_4: 606; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 607; GISEL-X86-NEXT: retl 608; GISEL-X86-NEXT: LBB5_1: 609; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 610; GISEL-X86-NEXT: testl %ecx, %ecx 611; GISEL-X86-NEXT: je LBB5_4 612; GISEL-X86-NEXT: LBB5_5: 613; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 614; GISEL-X86-NEXT: retl 615; 616; GISEL-X86-CMOV-LABEL: select_cmov_i64: 617; GISEL-X86-CMOV: ## %bb.0: 618; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 619; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 620; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 621; GISEL-X86-CMOV-NEXT: testl %ecx, %ecx 622; GISEL-X86-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %eax 623; GISEL-X86-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %edx 624; GISEL-X86-CMOV-NEXT: retl 625; 626; NDD-LABEL: select_cmov_i64: 627; NDD: ## %bb.0: 628; NDD-NEXT: testb $1, %dil 629; NDD-NEXT: cmovneq %rsi, %rdx, %rax 630; NDD-NEXT: retq 631 %1 = select i1 %cond, i64 %a, i64 %b 632 ret i64 %1 633} 634 635define i64 @select_cmp_cmov_i64(i64 %a, i64 %b) nounwind { 636; SDAG-X64-LABEL: select_cmp_cmov_i64: 637; SDAG-X64: ## %bb.0: 638; SDAG-X64-NEXT: movq %rsi, %rax 639; SDAG-X64-NEXT: cmpq %rsi, %rdi 640; SDAG-X64-NEXT: cmovbq %rdi, %rax 641; SDAG-X64-NEXT: retq 642; 643; FAST-X64-LABEL: select_cmp_cmov_i64: 644; FAST-X64: ## %bb.0: 645; FAST-X64-NEXT: movq %rsi, %rax 646; FAST-X64-NEXT: cmpq %rsi, %rdi 647; FAST-X64-NEXT: cmovbq %rdi, %rax 648; FAST-X64-NEXT: retq 649; 650; GISEL-X64-LABEL: select_cmp_cmov_i64: 651; GISEL-X64: ## %bb.0: 652; GISEL-X64-NEXT: movq %rdi, %rax 653; GISEL-X64-NEXT: xorl %ecx, %ecx 654; GISEL-X64-NEXT: cmpq %rsi, %rdi 655; GISEL-X64-NEXT: setb %cl 656; GISEL-X64-NEXT: andl $1, %ecx 657; GISEL-X64-NEXT: cmoveq %rsi, %rax 658; GISEL-X64-NEXT: retq 659; 660; SDAG-X86-LABEL: select_cmp_cmov_i64: 661; SDAG-X86: ## %bb.0: 662; SDAG-X86-NEXT: pushl %edi 663; SDAG-X86-NEXT: pushl %esi 664; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 665; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %esi 666; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 667; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 668; SDAG-X86-NEXT: cmpl %ecx, %eax 669; SDAG-X86-NEXT: movl %edx, %edi 670; SDAG-X86-NEXT: sbbl %esi, %edi 671; SDAG-X86-NEXT: jb LBB6_2 672; SDAG-X86-NEXT: ## %bb.1: 673; SDAG-X86-NEXT: movl %ecx, %eax 674; SDAG-X86-NEXT: movl %esi, %edx 675; SDAG-X86-NEXT: LBB6_2: 676; SDAG-X86-NEXT: popl %esi 677; SDAG-X86-NEXT: popl %edi 678; SDAG-X86-NEXT: retl 679; 680; SDAG-X86-CMOV-LABEL: select_cmp_cmov_i64: 681; SDAG-X86-CMOV: ## %bb.0: 682; SDAG-X86-CMOV-NEXT: pushl %edi 683; SDAG-X86-CMOV-NEXT: pushl %esi 684; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 685; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 686; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 687; SDAG-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %esi 688; SDAG-X86-CMOV-NEXT: cmpl %eax, %ecx 689; SDAG-X86-CMOV-NEXT: movl %esi, %edi 690; SDAG-X86-CMOV-NEXT: sbbl %edx, %edi 691; SDAG-X86-CMOV-NEXT: cmovbl %ecx, %eax 692; SDAG-X86-CMOV-NEXT: cmovbl %esi, %edx 693; SDAG-X86-CMOV-NEXT: popl %esi 694; SDAG-X86-CMOV-NEXT: popl %edi 695; SDAG-X86-CMOV-NEXT: retl 696; 697; FAST-X86-LABEL: select_cmp_cmov_i64: 698; FAST-X86: ## %bb.0: 699; FAST-X86-NEXT: pushl %edi 700; FAST-X86-NEXT: pushl %esi 701; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 702; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %esi 703; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 704; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 705; FAST-X86-NEXT: cmpl %esi, %eax 706; FAST-X86-NEXT: movl %edx, %edi 707; FAST-X86-NEXT: sbbl %ecx, %edi 708; FAST-X86-NEXT: jb LBB6_2 709; FAST-X86-NEXT: ## %bb.1: 710; FAST-X86-NEXT: movl %esi, %eax 711; FAST-X86-NEXT: movl %ecx, %edx 712; FAST-X86-NEXT: LBB6_2: 713; FAST-X86-NEXT: popl %esi 714; FAST-X86-NEXT: popl %edi 715; FAST-X86-NEXT: retl 716; 717; FAST-X86-CMOV-LABEL: select_cmp_cmov_i64: 718; FAST-X86-CMOV: ## %bb.0: 719; FAST-X86-CMOV-NEXT: pushl %edi 720; FAST-X86-CMOV-NEXT: pushl %esi 721; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 722; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax 723; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx 724; FAST-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %esi 725; FAST-X86-CMOV-NEXT: cmpl %eax, %esi 726; FAST-X86-CMOV-NEXT: movl %ecx, %edi 727; FAST-X86-CMOV-NEXT: sbbl %edx, %edi 728; FAST-X86-CMOV-NEXT: cmovbl %esi, %eax 729; FAST-X86-CMOV-NEXT: cmovbl %ecx, %edx 730; FAST-X86-CMOV-NEXT: popl %esi 731; FAST-X86-CMOV-NEXT: popl %edi 732; FAST-X86-CMOV-NEXT: retl 733; 734; GISEL-X86-LABEL: select_cmp_cmov_i64: 735; GISEL-X86: ## %bb.0: 736; GISEL-X86-NEXT: pushl %ebp 737; GISEL-X86-NEXT: pushl %ebx 738; GISEL-X86-NEXT: pushl %edi 739; GISEL-X86-NEXT: pushl %esi 740; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %esi 741; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ebp 742; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 743; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 744; GISEL-X86-NEXT: cmpl %eax, %esi 745; GISEL-X86-NEXT: setb %bl 746; GISEL-X86-NEXT: xorl %ecx, %ecx 747; GISEL-X86-NEXT: cmpl %edx, %ebp 748; GISEL-X86-NEXT: setb %bh 749; GISEL-X86-NEXT: sete %cl 750; GISEL-X86-NEXT: testl %ecx, %ecx 751; GISEL-X86-NEXT: je LBB6_2 752; GISEL-X86-NEXT: ## %bb.1: 753; GISEL-X86-NEXT: movb %bl, %bh 754; GISEL-X86-NEXT: LBB6_2: 755; GISEL-X86-NEXT: movzbl %bh, %edi 756; GISEL-X86-NEXT: andl $1, %edi 757; GISEL-X86-NEXT: je LBB6_4 758; GISEL-X86-NEXT: ## %bb.3: 759; GISEL-X86-NEXT: movl %esi, %eax 760; GISEL-X86-NEXT: LBB6_4: 761; GISEL-X86-NEXT: testl %edi, %edi 762; GISEL-X86-NEXT: je LBB6_6 763; GISEL-X86-NEXT: ## %bb.5: 764; GISEL-X86-NEXT: movl %ebp, %edx 765; GISEL-X86-NEXT: LBB6_6: 766; GISEL-X86-NEXT: popl %esi 767; GISEL-X86-NEXT: popl %edi 768; GISEL-X86-NEXT: popl %ebx 769; GISEL-X86-NEXT: popl %ebp 770; GISEL-X86-NEXT: retl 771; 772; GISEL-X86-CMOV-LABEL: select_cmp_cmov_i64: 773; GISEL-X86-CMOV: ## %bb.0: 774; GISEL-X86-CMOV-NEXT: pushl %ebp 775; GISEL-X86-CMOV-NEXT: pushl %ebx 776; GISEL-X86-CMOV-NEXT: pushl %edi 777; GISEL-X86-CMOV-NEXT: pushl %esi 778; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ebp 779; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx 780; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %esi 781; GISEL-X86-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edi 782; GISEL-X86-CMOV-NEXT: xorl %ecx, %ecx 783; GISEL-X86-CMOV-NEXT: cmpl %esi, %ebp 784; GISEL-X86-CMOV-NEXT: setb %cl 785; GISEL-X86-CMOV-NEXT: xorl %ebx, %ebx 786; GISEL-X86-CMOV-NEXT: xorl %eax, %eax 787; GISEL-X86-CMOV-NEXT: cmpl %edi, %edx 788; GISEL-X86-CMOV-NEXT: setb %bl 789; GISEL-X86-CMOV-NEXT: sete %al 790; GISEL-X86-CMOV-NEXT: testl %eax, %eax 791; GISEL-X86-CMOV-NEXT: cmovnew %cx, %bx 792; GISEL-X86-CMOV-NEXT: andl $1, %ebx 793; GISEL-X86-CMOV-NEXT: cmovel %esi, %ebp 794; GISEL-X86-CMOV-NEXT: cmovel %edi, %edx 795; GISEL-X86-CMOV-NEXT: movl %ebp, %eax 796; GISEL-X86-CMOV-NEXT: popl %esi 797; GISEL-X86-CMOV-NEXT: popl %edi 798; GISEL-X86-CMOV-NEXT: popl %ebx 799; GISEL-X86-CMOV-NEXT: popl %ebp 800; GISEL-X86-CMOV-NEXT: retl 801; 802; NDD-LABEL: select_cmp_cmov_i64: 803; NDD: ## %bb.0: 804; NDD-NEXT: cmpq %rsi, %rdi 805; NDD-NEXT: cmovbq %rdi, %rsi, %rax 806; NDD-NEXT: retq 807 %1 = icmp ult i64 %a, %b 808 %2 = select i1 %1, i64 %a, i64 %b 809 ret i64 %2 810} 811 812