1; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s 2; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s 3 4define i32 @TestComp128GT(fp128 %d1, fp128 %d2) { 5entry: 6 %cmp = fcmp ogt fp128 %d1, %d2 7 %conv = zext i1 %cmp to i32 8 ret i32 %conv 9; CHECK-LABEL: TestComp128GT: 10; CHECK: callq __gttf2 11; CHECK: setg %al 12; CHECK: movzbl %al, %eax 13; CHECK: retq 14} 15 16define i32 @TestComp128GE(fp128 %d1, fp128 %d2) { 17entry: 18 %cmp = fcmp oge fp128 %d1, %d2 19 %conv = zext i1 %cmp to i32 20 ret i32 %conv 21; CHECK-LABEL: TestComp128GE: 22; CHECK: callq __getf2 23; CHECK: testl %eax, %eax 24; CHECK: setns %al 25; CHECK: movzbl %al, %eax 26; CHECK: retq 27} 28 29define i32 @TestComp128LT(fp128 %d1, fp128 %d2) { 30entry: 31 %cmp = fcmp olt fp128 %d1, %d2 32 %conv = zext i1 %cmp to i32 33 ret i32 %conv 34; CHECK-LABEL: TestComp128LT: 35; CHECK: callq __lttf2 36; CHECK-NEXT: shrl $31, %eax 37; CHECK: retq 38; 39; The 'shrl' is a special optimization in llvm to combine 40; the effect of 'fcmp olt' and 'zext'. The main purpose is 41; to test soften call to __lttf2. 42} 43 44define i32 @TestComp128LE(fp128 %d1, fp128 %d2) { 45entry: 46 %cmp = fcmp ole fp128 %d1, %d2 47 %conv = zext i1 %cmp to i32 48 ret i32 %conv 49; CHECK-LABEL: TestComp128LE: 50; CHECK: callq __letf2 51; CHECK-NEXT: testl %eax, %eax 52; CHECK: setle %al 53; CHECK: movzbl %al, %eax 54; CHECK: retq 55} 56 57define i32 @TestComp128EQ(fp128 %d1, fp128 %d2) { 58entry: 59 %cmp = fcmp oeq fp128 %d1, %d2 60 %conv = zext i1 %cmp to i32 61 ret i32 %conv 62; CHECK-LABEL: TestComp128EQ: 63; CHECK: callq __eqtf2 64; CHECK-NEXT: testl %eax, %eax 65; CHECK: sete %al 66; CHECK: movzbl %al, %eax 67; CHECK: retq 68} 69 70define i32 @TestComp128NE(fp128 %d1, fp128 %d2) { 71entry: 72 %cmp = fcmp une fp128 %d1, %d2 73 %conv = zext i1 %cmp to i32 74 ret i32 %conv 75; CHECK-LABEL: TestComp128NE: 76; CHECK: callq __netf2 77; CHECK-NEXT: testl %eax, %eax 78; CHECK: setne %al 79; CHECK: movzbl %al, %eax 80; CHECK: retq 81} 82 83define fp128 @TestMax(fp128 %x, fp128 %y) { 84entry: 85 %cmp = fcmp ogt fp128 %x, %y 86 %cond = select i1 %cmp, fp128 %x, fp128 %y 87 ret fp128 %cond 88; CHECK-LABEL: TestMax: 89; CHECK: movaps %xmm1 90; CHECK: movaps %xmm0 91; CHECK: callq __gttf2 92; CHECK: movaps {{.*}}, %xmm0 93; CHECK: testl %eax, %eax 94; CHECK: movaps {{.*}}, %xmm0 95; CHECK: retq 96} 97