You could define a:
has_output() {
  LC_ALL=C awk '1;END{exit!NR}'
}
And then:
if cmd | has_output; then
  echo cmd did produce some output
fi
 Some awk implementations may choke on NUL characters in the input.
 Contrary to grep '^', the above would be guaranteed to work on an input that doesn't end in a newline character, but would add the missing newline.
 To avoid that and to be portable to systems where awk chokes on NUL, you could use perl instead:
has_output() {
  perl -pe '}{exit!$.'
}
 With perl, you could also define a variant that handles arbitrary files more gracefully:
has_output() {
  PERLIO=:unix perl -pe 'BEGIN{$/=\65536} END{exit!$.}'
}
That bounds the memory usage (like for files that don't have newline characters like big sparse files).
You could also create variants like:
has_at_least_one_non_empty_line() {
  LC_ALL=C awk '$0 != "" {n++};1; END{exit!n}'
}
or:
has_at_least_one_non_blank_line() {
  awk 'NF {n++};1; END{exit!n}'
}
(beware the definition of blank varies between awk implementations, some where it's limited to space and tab, some where it also includes ASCII vertical spacing characters like CR or FF, some where it considers the locale's blanks)
 Ideally, on Linux, you'd want to use the splice() system call to maximize performance. I don't know of a command that would expose it but you could always use python's ctypes:
has_output() {
  python -c 'if 1:
    from ctypes import *
    import sys
    l = CDLL("libc.so.6")
    ret = 1
    while l.splice(0,0,1,0,65536,0) > 0:
      ret = 0
    sys.exit(ret)'
}
(note that either has_output's stdin or stdout (or both) has to be a pipe for splice() to work).