1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=X86,X86-GENERIC 3; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefixes=X64,X64-GENERIC 4; RUN: llc < %s -mtriple=i686-- -mattr=+fast-imm16 | FileCheck %s --check-prefixes=X86,X86-FAST 5; RUN: llc < %s -mtriple=x86_64-- -mattr=+fast-imm16 | FileCheck %s --check-prefixes=X64,X64-FAST 6; RUN: llc < %s -mtriple=i686-- -mcpu=atom | FileCheck %s --check-prefixes=X86,X86-ATOM 7; RUN: llc < %s -mtriple=x86_64-- -mcpu=atom | FileCheck %s --check-prefixes=X64,X64-ATOM 8; RUN: llc < %s -mtriple=x86_64-- -mcpu=slm | FileCheck %s --check-prefixes=X64,X64-FAST 9; RUN: llc < %s -mtriple=x86_64-- -mcpu=knl | FileCheck %s --check-prefixes=X64,X64-FAST 10; RUN: llc < %s -mtriple=x86_64-- -mcpu=btver1 | FileCheck %s --check-prefixes=X64,X64-FAST 11; RUN: llc < %s -mtriple=x86_64-- -mcpu=btver2 | FileCheck %s --check-prefixes=X64,X64-FAST 12; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver1 | FileCheck %s --check-prefixes=X64,X64-FAST 13; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver2 | FileCheck %s --check-prefixes=X64,X64-FAST 14; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver3 | FileCheck %s --check-prefixes=X64,X64-FAST 15; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver4 | FileCheck %s --check-prefixes=X64,X64-FAST 16; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver5 | FileCheck %s --check-prefixes=X64,X64-FAST 17 18define i1 @cmp16_reg_eq_reg(i16 %a0, i16 %a1) { 19; X86-GENERIC-LABEL: cmp16_reg_eq_reg: 20; X86-GENERIC: # %bb.0: 21; X86-GENERIC-NEXT: movzwl {{[0-9]+}}(%esp), %eax 22; X86-GENERIC-NEXT: cmpw {{[0-9]+}}(%esp), %ax 23; X86-GENERIC-NEXT: sete %al 24; X86-GENERIC-NEXT: retl 25; 26; X64-GENERIC-LABEL: cmp16_reg_eq_reg: 27; X64-GENERIC: # %bb.0: 28; X64-GENERIC-NEXT: cmpw %si, %di 29; X64-GENERIC-NEXT: sete %al 30; X64-GENERIC-NEXT: retq 31; 32; X86-FAST-LABEL: cmp16_reg_eq_reg: 33; X86-FAST: # %bb.0: 34; X86-FAST-NEXT: movzwl {{[0-9]+}}(%esp), %eax 35; X86-FAST-NEXT: cmpw {{[0-9]+}}(%esp), %ax 36; X86-FAST-NEXT: sete %al 37; X86-FAST-NEXT: retl 38; 39; X64-FAST-LABEL: cmp16_reg_eq_reg: 40; X64-FAST: # %bb.0: 41; X64-FAST-NEXT: cmpw %si, %di 42; X64-FAST-NEXT: sete %al 43; X64-FAST-NEXT: retq 44; 45; X86-ATOM-LABEL: cmp16_reg_eq_reg: 46; X86-ATOM: # %bb.0: 47; X86-ATOM-NEXT: movzwl {{[0-9]+}}(%esp), %eax 48; X86-ATOM-NEXT: cmpw {{[0-9]+}}(%esp), %ax 49; X86-ATOM-NEXT: sete %al 50; X86-ATOM-NEXT: nop 51; X86-ATOM-NEXT: nop 52; X86-ATOM-NEXT: retl 53; 54; X64-ATOM-LABEL: cmp16_reg_eq_reg: 55; X64-ATOM: # %bb.0: 56; X64-ATOM-NEXT: cmpw %si, %di 57; X64-ATOM-NEXT: sete %al 58; X64-ATOM-NEXT: nop 59; X64-ATOM-NEXT: nop 60; X64-ATOM-NEXT: nop 61; X64-ATOM-NEXT: nop 62; X64-ATOM-NEXT: retq 63 %cmp = icmp eq i16 %a0, %a1 64 ret i1 %cmp 65} 66define i1 @cmp16_reg_eq_imm8(i16 %a0) { 67; X86-GENERIC-LABEL: cmp16_reg_eq_imm8: 68; X86-GENERIC: # %bb.0: 69; X86-GENERIC-NEXT: cmpw $15, {{[0-9]+}}(%esp) 70; X86-GENERIC-NEXT: sete %al 71; X86-GENERIC-NEXT: retl 72; 73; X64-GENERIC-LABEL: cmp16_reg_eq_imm8: 74; X64-GENERIC: # %bb.0: 75; X64-GENERIC-NEXT: cmpw $15, %di 76; X64-GENERIC-NEXT: sete %al 77; X64-GENERIC-NEXT: retq 78; 79; X86-FAST-LABEL: cmp16_reg_eq_imm8: 80; X86-FAST: # %bb.0: 81; X86-FAST-NEXT: cmpw $15, {{[0-9]+}}(%esp) 82; X86-FAST-NEXT: sete %al 83; X86-FAST-NEXT: retl 84; 85; X64-FAST-LABEL: cmp16_reg_eq_imm8: 86; X64-FAST: # %bb.0: 87; X64-FAST-NEXT: cmpw $15, %di 88; X64-FAST-NEXT: sete %al 89; X64-FAST-NEXT: retq 90; 91; X86-ATOM-LABEL: cmp16_reg_eq_imm8: 92; X86-ATOM: # %bb.0: 93; X86-ATOM-NEXT: cmpw $15, {{[0-9]+}}(%esp) 94; X86-ATOM-NEXT: sete %al 95; X86-ATOM-NEXT: nop 96; X86-ATOM-NEXT: nop 97; X86-ATOM-NEXT: nop 98; X86-ATOM-NEXT: nop 99; X86-ATOM-NEXT: retl 100; 101; X64-ATOM-LABEL: cmp16_reg_eq_imm8: 102; X64-ATOM: # %bb.0: 103; X64-ATOM-NEXT: cmpw $15, %di 104; X64-ATOM-NEXT: sete %al 105; X64-ATOM-NEXT: nop 106; X64-ATOM-NEXT: nop 107; X64-ATOM-NEXT: nop 108; X64-ATOM-NEXT: nop 109; X64-ATOM-NEXT: retq 110 %cmp = icmp eq i16 %a0, 15 111 ret i1 %cmp 112} 113 114define i1 @cmp16_reg_eq_imm16(i16 %a0) { 115; X86-GENERIC-LABEL: cmp16_reg_eq_imm16: 116; X86-GENERIC: # %bb.0: 117; X86-GENERIC-NEXT: cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400 118; X86-GENERIC-NEXT: sete %al 119; X86-GENERIC-NEXT: retl 120; 121; X64-GENERIC-LABEL: cmp16_reg_eq_imm16: 122; X64-GENERIC: # %bb.0: 123; X64-GENERIC-NEXT: movzwl %di, %eax 124; X64-GENERIC-NEXT: cmpl $1024, %eax # imm = 0x400 125; X64-GENERIC-NEXT: sete %al 126; X64-GENERIC-NEXT: retq 127; 128; X86-FAST-LABEL: cmp16_reg_eq_imm16: 129; X86-FAST: # %bb.0: 130; X86-FAST-NEXT: cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400 131; X86-FAST-NEXT: sete %al 132; X86-FAST-NEXT: retl 133; 134; X64-FAST-LABEL: cmp16_reg_eq_imm16: 135; X64-FAST: # %bb.0: 136; X64-FAST-NEXT: cmpw $1024, %di # imm = 0x400 137; X64-FAST-NEXT: sete %al 138; X64-FAST-NEXT: retq 139; 140; X86-ATOM-LABEL: cmp16_reg_eq_imm16: 141; X86-ATOM: # %bb.0: 142; X86-ATOM-NEXT: cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400 143; X86-ATOM-NEXT: sete %al 144; X86-ATOM-NEXT: nop 145; X86-ATOM-NEXT: nop 146; X86-ATOM-NEXT: nop 147; X86-ATOM-NEXT: nop 148; X86-ATOM-NEXT: retl 149; 150; X64-ATOM-LABEL: cmp16_reg_eq_imm16: 151; X64-ATOM: # %bb.0: 152; X64-ATOM-NEXT: cmpw $1024, %di # imm = 0x400 153; X64-ATOM-NEXT: sete %al 154; X64-ATOM-NEXT: nop 155; X64-ATOM-NEXT: nop 156; X64-ATOM-NEXT: nop 157; X64-ATOM-NEXT: nop 158; X64-ATOM-NEXT: retq 159 %cmp = icmp eq i16 %a0, 1024 160 ret i1 %cmp 161} 162 163define i1 @cmp16_reg_eq_imm16_minsize(i16 %a0) minsize { 164; X86-LABEL: cmp16_reg_eq_imm16_minsize: 165; X86: # %bb.0: 166; X86-NEXT: cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400 167; X86-NEXT: sete %al 168; X86-NEXT: retl 169; 170; X64-LABEL: cmp16_reg_eq_imm16_minsize: 171; X64: # %bb.0: 172; X64-NEXT: cmpw $1024, %di # imm = 0x400 173; X64-NEXT: sete %al 174; X64-NEXT: retq 175 %cmp = icmp eq i16 %a0, 1024 176 ret i1 %cmp 177} 178 179define i1 @cmp16_reg_eq_imm16_optsize(i16 %a0) optsize { 180; X86-LABEL: cmp16_reg_eq_imm16_optsize: 181; X86: # %bb.0: 182; X86-NEXT: cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400 183; X86-NEXT: sete %al 184; X86-NEXT: retl 185; 186; X64-GENERIC-LABEL: cmp16_reg_eq_imm16_optsize: 187; X64-GENERIC: # %bb.0: 188; X64-GENERIC-NEXT: movzwl %di, %eax 189; X64-GENERIC-NEXT: cmpl $1024, %eax # imm = 0x400 190; X64-GENERIC-NEXT: sete %al 191; X64-GENERIC-NEXT: retq 192; 193; X64-FAST-LABEL: cmp16_reg_eq_imm16_optsize: 194; X64-FAST: # %bb.0: 195; X64-FAST-NEXT: cmpw $1024, %di # imm = 0x400 196; X64-FAST-NEXT: sete %al 197; X64-FAST-NEXT: retq 198; 199; X64-ATOM-LABEL: cmp16_reg_eq_imm16_optsize: 200; X64-ATOM: # %bb.0: 201; X64-ATOM-NEXT: cmpw $1024, %di # imm = 0x400 202; X64-ATOM-NEXT: sete %al 203; X64-ATOM-NEXT: retq 204 %cmp = icmp eq i16 %a0, 1024 205 ret i1 %cmp 206} 207 208define i1 @cmp16_reg_sgt_imm8(i16 %a0) { 209; X86-GENERIC-LABEL: cmp16_reg_sgt_imm8: 210; X86-GENERIC: # %bb.0: 211; X86-GENERIC-NEXT: cmpw $16, {{[0-9]+}}(%esp) 212; X86-GENERIC-NEXT: setge %al 213; X86-GENERIC-NEXT: retl 214; 215; X64-GENERIC-LABEL: cmp16_reg_sgt_imm8: 216; X64-GENERIC: # %bb.0: 217; X64-GENERIC-NEXT: cmpw $16, %di 218; X64-GENERIC-NEXT: setge %al 219; X64-GENERIC-NEXT: retq 220; 221; X86-FAST-LABEL: cmp16_reg_sgt_imm8: 222; X86-FAST: # %bb.0: 223; X86-FAST-NEXT: cmpw $16, {{[0-9]+}}(%esp) 224; X86-FAST-NEXT: setge %al 225; X86-FAST-NEXT: retl 226; 227; X64-FAST-LABEL: cmp16_reg_sgt_imm8: 228; X64-FAST: # %bb.0: 229; X64-FAST-NEXT: cmpw $16, %di 230; X64-FAST-NEXT: setge %al 231; X64-FAST-NEXT: retq 232; 233; X86-ATOM-LABEL: cmp16_reg_sgt_imm8: 234; X86-ATOM: # %bb.0: 235; X86-ATOM-NEXT: cmpw $16, {{[0-9]+}}(%esp) 236; X86-ATOM-NEXT: setge %al 237; X86-ATOM-NEXT: nop 238; X86-ATOM-NEXT: nop 239; X86-ATOM-NEXT: nop 240; X86-ATOM-NEXT: nop 241; X86-ATOM-NEXT: retl 242; 243; X64-ATOM-LABEL: cmp16_reg_sgt_imm8: 244; X64-ATOM: # %bb.0: 245; X64-ATOM-NEXT: cmpw $16, %di 246; X64-ATOM-NEXT: setge %al 247; X64-ATOM-NEXT: nop 248; X64-ATOM-NEXT: nop 249; X64-ATOM-NEXT: nop 250; X64-ATOM-NEXT: nop 251; X64-ATOM-NEXT: retq 252 %cmp = icmp sgt i16 %a0, 15 253 ret i1 %cmp 254} 255 256define i1 @cmp16_reg_sgt_imm16(i16 %a0) { 257; X86-GENERIC-LABEL: cmp16_reg_sgt_imm16: 258; X86-GENERIC: # %bb.0: 259; X86-GENERIC-NEXT: cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01 260; X86-GENERIC-NEXT: setge %al 261; X86-GENERIC-NEXT: retl 262; 263; X64-GENERIC-LABEL: cmp16_reg_sgt_imm16: 264; X64-GENERIC: # %bb.0: 265; X64-GENERIC-NEXT: movswl %di, %eax 266; X64-GENERIC-NEXT: cmpl $-1023, %eax # imm = 0xFC01 267; X64-GENERIC-NEXT: setge %al 268; X64-GENERIC-NEXT: retq 269; 270; X86-FAST-LABEL: cmp16_reg_sgt_imm16: 271; X86-FAST: # %bb.0: 272; X86-FAST-NEXT: cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01 273; X86-FAST-NEXT: setge %al 274; X86-FAST-NEXT: retl 275; 276; X64-FAST-LABEL: cmp16_reg_sgt_imm16: 277; X64-FAST: # %bb.0: 278; X64-FAST-NEXT: cmpw $-1023, %di # imm = 0xFC01 279; X64-FAST-NEXT: setge %al 280; X64-FAST-NEXT: retq 281; 282; X86-ATOM-LABEL: cmp16_reg_sgt_imm16: 283; X86-ATOM: # %bb.0: 284; X86-ATOM-NEXT: cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01 285; X86-ATOM-NEXT: setge %al 286; X86-ATOM-NEXT: nop 287; X86-ATOM-NEXT: nop 288; X86-ATOM-NEXT: nop 289; X86-ATOM-NEXT: nop 290; X86-ATOM-NEXT: retl 291; 292; X64-ATOM-LABEL: cmp16_reg_sgt_imm16: 293; X64-ATOM: # %bb.0: 294; X64-ATOM-NEXT: cmpw $-1023, %di # imm = 0xFC01 295; X64-ATOM-NEXT: setge %al 296; X64-ATOM-NEXT: nop 297; X64-ATOM-NEXT: nop 298; X64-ATOM-NEXT: nop 299; X64-ATOM-NEXT: nop 300; X64-ATOM-NEXT: retq 301 %cmp = icmp sgt i16 %a0, -1024 302 ret i1 %cmp 303} 304 305define i1 @cmp16_reg_sgt_imm16_minsize(i16 %a0) minsize { 306; X86-LABEL: cmp16_reg_sgt_imm16_minsize: 307; X86: # %bb.0: 308; X86-NEXT: cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01 309; X86-NEXT: setge %al 310; X86-NEXT: retl 311; 312; X64-LABEL: cmp16_reg_sgt_imm16_minsize: 313; X64: # %bb.0: 314; X64-NEXT: cmpw $-1023, %di # imm = 0xFC01 315; X64-NEXT: setge %al 316; X64-NEXT: retq 317 %cmp = icmp sgt i16 %a0, -1024 318 ret i1 %cmp 319} 320 321define i1 @cmp16_reg_sgt_imm16_optsize(i16 %a0) optsize { 322; X86-LABEL: cmp16_reg_sgt_imm16_optsize: 323; X86: # %bb.0: 324; X86-NEXT: cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01 325; X86-NEXT: setge %al 326; X86-NEXT: retl 327; 328; X64-GENERIC-LABEL: cmp16_reg_sgt_imm16_optsize: 329; X64-GENERIC: # %bb.0: 330; X64-GENERIC-NEXT: movswl %di, %eax 331; X64-GENERIC-NEXT: cmpl $-1023, %eax # imm = 0xFC01 332; X64-GENERIC-NEXT: setge %al 333; X64-GENERIC-NEXT: retq 334; 335; X64-FAST-LABEL: cmp16_reg_sgt_imm16_optsize: 336; X64-FAST: # %bb.0: 337; X64-FAST-NEXT: cmpw $-1023, %di # imm = 0xFC01 338; X64-FAST-NEXT: setge %al 339; X64-FAST-NEXT: retq 340; 341; X64-ATOM-LABEL: cmp16_reg_sgt_imm16_optsize: 342; X64-ATOM: # %bb.0: 343; X64-ATOM-NEXT: cmpw $-1023, %di # imm = 0xFC01 344; X64-ATOM-NEXT: setge %al 345; X64-ATOM-NEXT: retq 346 %cmp = icmp sgt i16 %a0, -1024 347 ret i1 %cmp 348} 349 350define i1 @cmp16_reg_uge_imm16(i16 %a0) { 351; X86-GENERIC-LABEL: cmp16_reg_uge_imm16: 352; X86-GENERIC: # %bb.0: 353; X86-GENERIC-NEXT: cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00 354; X86-GENERIC-NEXT: setae %al 355; X86-GENERIC-NEXT: retl 356; 357; X64-GENERIC-LABEL: cmp16_reg_uge_imm16: 358; X64-GENERIC: # %bb.0: 359; X64-GENERIC-NEXT: movzwl %di, %eax 360; X64-GENERIC-NEXT: cmpl $64512, %eax # imm = 0xFC00 361; X64-GENERIC-NEXT: setae %al 362; X64-GENERIC-NEXT: retq 363; 364; X86-FAST-LABEL: cmp16_reg_uge_imm16: 365; X86-FAST: # %bb.0: 366; X86-FAST-NEXT: cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00 367; X86-FAST-NEXT: setae %al 368; X86-FAST-NEXT: retl 369; 370; X64-FAST-LABEL: cmp16_reg_uge_imm16: 371; X64-FAST: # %bb.0: 372; X64-FAST-NEXT: cmpw $-1024, %di # imm = 0xFC00 373; X64-FAST-NEXT: setae %al 374; X64-FAST-NEXT: retq 375; 376; X86-ATOM-LABEL: cmp16_reg_uge_imm16: 377; X86-ATOM: # %bb.0: 378; X86-ATOM-NEXT: cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00 379; X86-ATOM-NEXT: setae %al 380; X86-ATOM-NEXT: nop 381; X86-ATOM-NEXT: nop 382; X86-ATOM-NEXT: nop 383; X86-ATOM-NEXT: nop 384; X86-ATOM-NEXT: retl 385; 386; X64-ATOM-LABEL: cmp16_reg_uge_imm16: 387; X64-ATOM: # %bb.0: 388; X64-ATOM-NEXT: cmpw $-1024, %di # imm = 0xFC00 389; X64-ATOM-NEXT: setae %al 390; X64-ATOM-NEXT: nop 391; X64-ATOM-NEXT: nop 392; X64-ATOM-NEXT: nop 393; X64-ATOM-NEXT: nop 394; X64-ATOM-NEXT: retq 395 %cmp = icmp uge i16 %a0, -1024 396 ret i1 %cmp 397} 398 399define i1 @cmp16_reg_uge_imm16_minsize(i16 %a0) minsize { 400; X86-LABEL: cmp16_reg_uge_imm16_minsize: 401; X86: # %bb.0: 402; X86-NEXT: cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00 403; X86-NEXT: setae %al 404; X86-NEXT: retl 405; 406; X64-LABEL: cmp16_reg_uge_imm16_minsize: 407; X64: # %bb.0: 408; X64-NEXT: cmpw $-1024, %di # imm = 0xFC00 409; X64-NEXT: setae %al 410; X64-NEXT: retq 411 %cmp = icmp uge i16 %a0, -1024 412 ret i1 %cmp 413} 414 415define i1 @cmp16_reg_uge_imm16_optsize(i16 %a0) optsize { 416; X86-LABEL: cmp16_reg_uge_imm16_optsize: 417; X86: # %bb.0: 418; X86-NEXT: cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00 419; X86-NEXT: setae %al 420; X86-NEXT: retl 421; 422; X64-GENERIC-LABEL: cmp16_reg_uge_imm16_optsize: 423; X64-GENERIC: # %bb.0: 424; X64-GENERIC-NEXT: movzwl %di, %eax 425; X64-GENERIC-NEXT: cmpl $64512, %eax # imm = 0xFC00 426; X64-GENERIC-NEXT: setae %al 427; X64-GENERIC-NEXT: retq 428; 429; X64-FAST-LABEL: cmp16_reg_uge_imm16_optsize: 430; X64-FAST: # %bb.0: 431; X64-FAST-NEXT: cmpw $-1024, %di # imm = 0xFC00 432; X64-FAST-NEXT: setae %al 433; X64-FAST-NEXT: retq 434; 435; X64-ATOM-LABEL: cmp16_reg_uge_imm16_optsize: 436; X64-ATOM: # %bb.0: 437; X64-ATOM-NEXT: cmpw $-1024, %di # imm = 0xFC00 438; X64-ATOM-NEXT: setae %al 439; X64-ATOM-NEXT: retq 440 %cmp = icmp uge i16 %a0, -1024 441 ret i1 %cmp 442} 443 444define i1 @cmp16_load_ne_load(ptr %p0, ptr %p1) { 445; X86-GENERIC-LABEL: cmp16_load_ne_load: 446; X86-GENERIC: # %bb.0: 447; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 448; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx 449; X86-GENERIC-NEXT: movzwl (%ecx), %ecx 450; X86-GENERIC-NEXT: cmpw (%eax), %cx 451; X86-GENERIC-NEXT: setne %al 452; X86-GENERIC-NEXT: retl 453; 454; X64-GENERIC-LABEL: cmp16_load_ne_load: 455; X64-GENERIC: # %bb.0: 456; X64-GENERIC-NEXT: movzwl (%rdi), %eax 457; X64-GENERIC-NEXT: cmpw (%rsi), %ax 458; X64-GENERIC-NEXT: setne %al 459; X64-GENERIC-NEXT: retq 460; 461; X86-FAST-LABEL: cmp16_load_ne_load: 462; X86-FAST: # %bb.0: 463; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 464; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ecx 465; X86-FAST-NEXT: movzwl (%ecx), %ecx 466; X86-FAST-NEXT: cmpw (%eax), %cx 467; X86-FAST-NEXT: setne %al 468; X86-FAST-NEXT: retl 469; 470; X64-FAST-LABEL: cmp16_load_ne_load: 471; X64-FAST: # %bb.0: 472; X64-FAST-NEXT: movzwl (%rdi), %eax 473; X64-FAST-NEXT: cmpw (%rsi), %ax 474; X64-FAST-NEXT: setne %al 475; X64-FAST-NEXT: retq 476; 477; X86-ATOM-LABEL: cmp16_load_ne_load: 478; X86-ATOM: # %bb.0: 479; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx 480; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 481; X86-ATOM-NEXT: movzwl (%ecx), %ecx 482; X86-ATOM-NEXT: cmpw (%eax), %cx 483; X86-ATOM-NEXT: setne %al 484; X86-ATOM-NEXT: retl 485; 486; X64-ATOM-LABEL: cmp16_load_ne_load: 487; X64-ATOM: # %bb.0: 488; X64-ATOM-NEXT: movzwl (%rdi), %eax 489; X64-ATOM-NEXT: cmpw (%rsi), %ax 490; X64-ATOM-NEXT: setne %al 491; X64-ATOM-NEXT: nop 492; X64-ATOM-NEXT: nop 493; X64-ATOM-NEXT: retq 494 %ld0 = load i16, ptr %p0 495 %ld1 = load i16, ptr %p1 496 %cmp = icmp ne i16 %ld0, %ld1 497 ret i1 %cmp 498} 499 500define i1 @cmp16_load_ne_imm8(ptr %p0) { 501; X86-GENERIC-LABEL: cmp16_load_ne_imm8: 502; X86-GENERIC: # %bb.0: 503; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 504; X86-GENERIC-NEXT: cmpw $15, (%eax) 505; X86-GENERIC-NEXT: setne %al 506; X86-GENERIC-NEXT: retl 507; 508; X64-GENERIC-LABEL: cmp16_load_ne_imm8: 509; X64-GENERIC: # %bb.0: 510; X64-GENERIC-NEXT: cmpw $15, (%rdi) 511; X64-GENERIC-NEXT: setne %al 512; X64-GENERIC-NEXT: retq 513; 514; X86-FAST-LABEL: cmp16_load_ne_imm8: 515; X86-FAST: # %bb.0: 516; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 517; X86-FAST-NEXT: cmpw $15, (%eax) 518; X86-FAST-NEXT: setne %al 519; X86-FAST-NEXT: retl 520; 521; X64-FAST-LABEL: cmp16_load_ne_imm8: 522; X64-FAST: # %bb.0: 523; X64-FAST-NEXT: cmpw $15, (%rdi) 524; X64-FAST-NEXT: setne %al 525; X64-FAST-NEXT: retq 526; 527; X86-ATOM-LABEL: cmp16_load_ne_imm8: 528; X86-ATOM: # %bb.0: 529; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 530; X86-ATOM-NEXT: cmpw $15, (%eax) 531; X86-ATOM-NEXT: setne %al 532; X86-ATOM-NEXT: nop 533; X86-ATOM-NEXT: nop 534; X86-ATOM-NEXT: retl 535; 536; X64-ATOM-LABEL: cmp16_load_ne_imm8: 537; X64-ATOM: # %bb.0: 538; X64-ATOM-NEXT: cmpw $15, (%rdi) 539; X64-ATOM-NEXT: setne %al 540; X64-ATOM-NEXT: nop 541; X64-ATOM-NEXT: nop 542; X64-ATOM-NEXT: nop 543; X64-ATOM-NEXT: nop 544; X64-ATOM-NEXT: retq 545 %ld = load i16, ptr %p0 546 %cmp = icmp ne i16 %ld, 15 547 ret i1 %cmp 548} 549 550define i1 @cmp16_load_ne_imm16(ptr %p0) { 551; X86-GENERIC-LABEL: cmp16_load_ne_imm16: 552; X86-GENERIC: # %bb.0: 553; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 554; X86-GENERIC-NEXT: cmpw $512, (%eax) # imm = 0x200 555; X86-GENERIC-NEXT: setne %al 556; X86-GENERIC-NEXT: retl 557; 558; X64-GENERIC-LABEL: cmp16_load_ne_imm16: 559; X64-GENERIC: # %bb.0: 560; X64-GENERIC-NEXT: cmpw $512, (%rdi) # imm = 0x200 561; X64-GENERIC-NEXT: setne %al 562; X64-GENERIC-NEXT: retq 563; 564; X86-FAST-LABEL: cmp16_load_ne_imm16: 565; X86-FAST: # %bb.0: 566; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 567; X86-FAST-NEXT: cmpw $512, (%eax) # imm = 0x200 568; X86-FAST-NEXT: setne %al 569; X86-FAST-NEXT: retl 570; 571; X64-FAST-LABEL: cmp16_load_ne_imm16: 572; X64-FAST: # %bb.0: 573; X64-FAST-NEXT: cmpw $512, (%rdi) # imm = 0x200 574; X64-FAST-NEXT: setne %al 575; X64-FAST-NEXT: retq 576; 577; X86-ATOM-LABEL: cmp16_load_ne_imm16: 578; X86-ATOM: # %bb.0: 579; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 580; X86-ATOM-NEXT: cmpw $512, (%eax) # imm = 0x200 581; X86-ATOM-NEXT: setne %al 582; X86-ATOM-NEXT: nop 583; X86-ATOM-NEXT: nop 584; X86-ATOM-NEXT: retl 585; 586; X64-ATOM-LABEL: cmp16_load_ne_imm16: 587; X64-ATOM: # %bb.0: 588; X64-ATOM-NEXT: cmpw $512, (%rdi) # imm = 0x200 589; X64-ATOM-NEXT: setne %al 590; X64-ATOM-NEXT: nop 591; X64-ATOM-NEXT: nop 592; X64-ATOM-NEXT: nop 593; X64-ATOM-NEXT: nop 594; X64-ATOM-NEXT: retq 595 %ld = load i16, ptr %p0 596 %cmp = icmp ne i16 %ld, 512 597 ret i1 %cmp 598} 599 600define i1 @cmp16_load_slt_imm8(ptr %p0) { 601; X86-GENERIC-LABEL: cmp16_load_slt_imm8: 602; X86-GENERIC: # %bb.0: 603; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 604; X86-GENERIC-NEXT: cmpw $15, (%eax) 605; X86-GENERIC-NEXT: setl %al 606; X86-GENERIC-NEXT: retl 607; 608; X64-GENERIC-LABEL: cmp16_load_slt_imm8: 609; X64-GENERIC: # %bb.0: 610; X64-GENERIC-NEXT: cmpw $15, (%rdi) 611; X64-GENERIC-NEXT: setl %al 612; X64-GENERIC-NEXT: retq 613; 614; X86-FAST-LABEL: cmp16_load_slt_imm8: 615; X86-FAST: # %bb.0: 616; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 617; X86-FAST-NEXT: cmpw $15, (%eax) 618; X86-FAST-NEXT: setl %al 619; X86-FAST-NEXT: retl 620; 621; X64-FAST-LABEL: cmp16_load_slt_imm8: 622; X64-FAST: # %bb.0: 623; X64-FAST-NEXT: cmpw $15, (%rdi) 624; X64-FAST-NEXT: setl %al 625; X64-FAST-NEXT: retq 626; 627; X86-ATOM-LABEL: cmp16_load_slt_imm8: 628; X86-ATOM: # %bb.0: 629; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 630; X86-ATOM-NEXT: cmpw $15, (%eax) 631; X86-ATOM-NEXT: setl %al 632; X86-ATOM-NEXT: nop 633; X86-ATOM-NEXT: nop 634; X86-ATOM-NEXT: retl 635; 636; X64-ATOM-LABEL: cmp16_load_slt_imm8: 637; X64-ATOM: # %bb.0: 638; X64-ATOM-NEXT: cmpw $15, (%rdi) 639; X64-ATOM-NEXT: setl %al 640; X64-ATOM-NEXT: nop 641; X64-ATOM-NEXT: nop 642; X64-ATOM-NEXT: nop 643; X64-ATOM-NEXT: nop 644; X64-ATOM-NEXT: retq 645 %ld = load i16, ptr %p0 646 %cmp = icmp slt i16 %ld, 15 647 ret i1 %cmp 648} 649 650define i1 @cmp16_load_slt_imm16(ptr %p0) { 651; X86-GENERIC-LABEL: cmp16_load_slt_imm16: 652; X86-GENERIC: # %bb.0: 653; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 654; X86-GENERIC-NEXT: cmpw $512, (%eax) # imm = 0x200 655; X86-GENERIC-NEXT: setl %al 656; X86-GENERIC-NEXT: retl 657; 658; X64-GENERIC-LABEL: cmp16_load_slt_imm16: 659; X64-GENERIC: # %bb.0: 660; X64-GENERIC-NEXT: cmpw $512, (%rdi) # imm = 0x200 661; X64-GENERIC-NEXT: setl %al 662; X64-GENERIC-NEXT: retq 663; 664; X86-FAST-LABEL: cmp16_load_slt_imm16: 665; X86-FAST: # %bb.0: 666; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 667; X86-FAST-NEXT: cmpw $512, (%eax) # imm = 0x200 668; X86-FAST-NEXT: setl %al 669; X86-FAST-NEXT: retl 670; 671; X64-FAST-LABEL: cmp16_load_slt_imm16: 672; X64-FAST: # %bb.0: 673; X64-FAST-NEXT: cmpw $512, (%rdi) # imm = 0x200 674; X64-FAST-NEXT: setl %al 675; X64-FAST-NEXT: retq 676; 677; X86-ATOM-LABEL: cmp16_load_slt_imm16: 678; X86-ATOM: # %bb.0: 679; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 680; X86-ATOM-NEXT: cmpw $512, (%eax) # imm = 0x200 681; X86-ATOM-NEXT: setl %al 682; X86-ATOM-NEXT: nop 683; X86-ATOM-NEXT: nop 684; X86-ATOM-NEXT: retl 685; 686; X64-ATOM-LABEL: cmp16_load_slt_imm16: 687; X64-ATOM: # %bb.0: 688; X64-ATOM-NEXT: cmpw $512, (%rdi) # imm = 0x200 689; X64-ATOM-NEXT: setl %al 690; X64-ATOM-NEXT: nop 691; X64-ATOM-NEXT: nop 692; X64-ATOM-NEXT: nop 693; X64-ATOM-NEXT: nop 694; X64-ATOM-NEXT: retq 695 %ld = load i16, ptr %p0 696 %cmp = icmp slt i16 %ld, 512 697 ret i1 %cmp 698} 699 700define i1 @cmp16_load_slt_imm16_minsize(ptr %p0) minsize { 701; X86-LABEL: cmp16_load_slt_imm16_minsize: 702; X86: # %bb.0: 703; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 704; X86-NEXT: cmpw $512, (%eax) # imm = 0x200 705; X86-NEXT: setl %al 706; X86-NEXT: retl 707; 708; X64-LABEL: cmp16_load_slt_imm16_minsize: 709; X64: # %bb.0: 710; X64-NEXT: cmpw $512, (%rdi) # imm = 0x200 711; X64-NEXT: setl %al 712; X64-NEXT: retq 713 %ld = load i16, ptr %p0 714 %cmp = icmp slt i16 %ld, 512 715 ret i1 %cmp 716} 717 718define i1 @cmp16_load_slt_imm16_optsize(ptr %p0) optsize { 719; X86-LABEL: cmp16_load_slt_imm16_optsize: 720; X86: # %bb.0: 721; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 722; X86-NEXT: cmpw $512, (%eax) # imm = 0x200 723; X86-NEXT: setl %al 724; X86-NEXT: retl 725; 726; X64-LABEL: cmp16_load_slt_imm16_optsize: 727; X64: # %bb.0: 728; X64-NEXT: cmpw $512, (%rdi) # imm = 0x200 729; X64-NEXT: setl %al 730; X64-NEXT: retq 731 %ld = load i16, ptr %p0 732 %cmp = icmp slt i16 %ld, 512 733 ret i1 %cmp 734} 735 736define i1 @cmp16_load_ule_imm8(ptr %p0) { 737; X86-GENERIC-LABEL: cmp16_load_ule_imm8: 738; X86-GENERIC: # %bb.0: 739; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 740; X86-GENERIC-NEXT: cmpw $16, (%eax) 741; X86-GENERIC-NEXT: setb %al 742; X86-GENERIC-NEXT: retl 743; 744; X64-GENERIC-LABEL: cmp16_load_ule_imm8: 745; X64-GENERIC: # %bb.0: 746; X64-GENERIC-NEXT: cmpw $16, (%rdi) 747; X64-GENERIC-NEXT: setb %al 748; X64-GENERIC-NEXT: retq 749; 750; X86-FAST-LABEL: cmp16_load_ule_imm8: 751; X86-FAST: # %bb.0: 752; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 753; X86-FAST-NEXT: cmpw $16, (%eax) 754; X86-FAST-NEXT: setb %al 755; X86-FAST-NEXT: retl 756; 757; X64-FAST-LABEL: cmp16_load_ule_imm8: 758; X64-FAST: # %bb.0: 759; X64-FAST-NEXT: cmpw $16, (%rdi) 760; X64-FAST-NEXT: setb %al 761; X64-FAST-NEXT: retq 762; 763; X86-ATOM-LABEL: cmp16_load_ule_imm8: 764; X86-ATOM: # %bb.0: 765; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 766; X86-ATOM-NEXT: cmpw $16, (%eax) 767; X86-ATOM-NEXT: setb %al 768; X86-ATOM-NEXT: nop 769; X86-ATOM-NEXT: nop 770; X86-ATOM-NEXT: retl 771; 772; X64-ATOM-LABEL: cmp16_load_ule_imm8: 773; X64-ATOM: # %bb.0: 774; X64-ATOM-NEXT: cmpw $16, (%rdi) 775; X64-ATOM-NEXT: setb %al 776; X64-ATOM-NEXT: nop 777; X64-ATOM-NEXT: nop 778; X64-ATOM-NEXT: nop 779; X64-ATOM-NEXT: nop 780; X64-ATOM-NEXT: retq 781 %ld = load i16, ptr %p0 782 %cmp = icmp ule i16 %ld, 15 783 ret i1 %cmp 784} 785 786define i1 @cmp16_load_ule_imm16(ptr %p0) { 787; X86-GENERIC-LABEL: cmp16_load_ule_imm16: 788; X86-GENERIC: # %bb.0: 789; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax 790; X86-GENERIC-NEXT: cmpw $513, (%eax) # imm = 0x201 791; X86-GENERIC-NEXT: setb %al 792; X86-GENERIC-NEXT: retl 793; 794; X64-GENERIC-LABEL: cmp16_load_ule_imm16: 795; X64-GENERIC: # %bb.0: 796; X64-GENERIC-NEXT: cmpw $513, (%rdi) # imm = 0x201 797; X64-GENERIC-NEXT: setb %al 798; X64-GENERIC-NEXT: retq 799; 800; X86-FAST-LABEL: cmp16_load_ule_imm16: 801; X86-FAST: # %bb.0: 802; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 803; X86-FAST-NEXT: cmpw $513, (%eax) # imm = 0x201 804; X86-FAST-NEXT: setb %al 805; X86-FAST-NEXT: retl 806; 807; X64-FAST-LABEL: cmp16_load_ule_imm16: 808; X64-FAST: # %bb.0: 809; X64-FAST-NEXT: cmpw $513, (%rdi) # imm = 0x201 810; X64-FAST-NEXT: setb %al 811; X64-FAST-NEXT: retq 812; 813; X86-ATOM-LABEL: cmp16_load_ule_imm16: 814; X86-ATOM: # %bb.0: 815; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax 816; X86-ATOM-NEXT: cmpw $513, (%eax) # imm = 0x201 817; X86-ATOM-NEXT: setb %al 818; X86-ATOM-NEXT: nop 819; X86-ATOM-NEXT: nop 820; X86-ATOM-NEXT: retl 821; 822; X64-ATOM-LABEL: cmp16_load_ule_imm16: 823; X64-ATOM: # %bb.0: 824; X64-ATOM-NEXT: cmpw $513, (%rdi) # imm = 0x201 825; X64-ATOM-NEXT: setb %al 826; X64-ATOM-NEXT: nop 827; X64-ATOM-NEXT: nop 828; X64-ATOM-NEXT: nop 829; X64-ATOM-NEXT: nop 830; X64-ATOM-NEXT: retq 831 %ld = load i16, ptr %p0 832 %cmp = icmp ule i16 %ld, 512 833 ret i1 %cmp 834} 835 836define i1 @cmp16_load_ule_imm16_minsize(ptr %p0) minsize { 837; X86-LABEL: cmp16_load_ule_imm16_minsize: 838; X86: # %bb.0: 839; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 840; X86-NEXT: cmpw $513, (%eax) # imm = 0x201 841; X86-NEXT: setb %al 842; X86-NEXT: retl 843; 844; X64-LABEL: cmp16_load_ule_imm16_minsize: 845; X64: # %bb.0: 846; X64-NEXT: cmpw $513, (%rdi) # imm = 0x201 847; X64-NEXT: setb %al 848; X64-NEXT: retq 849 %ld = load i16, ptr %p0 850 %cmp = icmp ule i16 %ld, 512 851 ret i1 %cmp 852} 853 854define i1 @cmp16_load_ule_imm16_optsize(ptr %p0) optsize { 855; X86-LABEL: cmp16_load_ule_imm16_optsize: 856; X86: # %bb.0: 857; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 858; X86-NEXT: cmpw $513, (%eax) # imm = 0x201 859; X86-NEXT: setb %al 860; X86-NEXT: retl 861; 862; X64-LABEL: cmp16_load_ule_imm16_optsize: 863; X64: # %bb.0: 864; X64-NEXT: cmpw $513, (%rdi) # imm = 0x201 865; X64-NEXT: setb %al 866; X64-NEXT: retq 867 %ld = load i16, ptr %p0 868 %cmp = icmp ule i16 %ld, 512 869 ret i1 %cmp 870} 871